home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / info-service / prospero / doc / prospero-protocol-v5.tex < prev    next >
Encoding:
Text File  |  1993-06-16  |  103.3 KB  |  2,445 lines

  1. % If you somehow got this file without fullpage.sty,  delete
  2. % ``fullpage'' from the list of style options.  It just pulls out the
  3. % margins a bit.
  4. \documentstyle[11pt,twoside,fullpage]{report}
  5. % New commands
  6. %-------------
  7.  
  8. % for meta-symbols
  9. \newcommand{\meta}[1]{{\bf \mbox{\(<\)#1\(>\)}}}
  10. % for literal tokens. 
  11. \newcommand{\lit}[1]{{\tt \mbox{#1}}}
  12. %for attributes
  13. \newcommand{\atr}[1]{\mbox{\sc #1}}
  14. % for identifying text
  15. \newcommand{\text}[1]{{\em #1}\/}
  16.  
  17. % Start and end of One or More
  18. \newcommand{\ooms}{\([\,\)}
  19. \newcommand{\oome}{\(\,]^+\)}
  20. % start and end of zero or more
  21. \newcommand{\zoms}{\([\,\)}
  22. \newcommand{\zome}{\(\,]^*\)}
  23. % Start and end of zero or one
  24. \newcommand{\zoos}{\([\,\)}
  25. \newcommand{\zooe}{\(\,]\)}
  26. % start an OR
  27. \newcommand{\ors}{{\bf (\,}}
  28. \newcommand{\ore}{{\bf \,) }}
  29. \newcommand{\metaor}{{\em \,or\, }}
  30. \newcommand{\hexnum}[1]{\(\mbox{#1}_{16}\)}
  31. \newcommand{\unix}{{\sc unix}}
  32. \newcommand{\selectlines}{\zoms\meta{LF} \\ \lit{SELECT} \meta{applies-to}
  33.     \ors\lit{FIELD} \metaor \lit{INTRINSIC}
  34.      \metaor \lit{APPLICATION}\ore \meta{attribute-name} 
  35.         \meta{attribute-value-type}\ore
  36.      \zoms\meta{value-tuple-element}\zome\zome}
  37. \newenvironment{command}{\begin{verse}\sloppy}{\end{verse}}
  38. \newcommand{\commandsize}{\large}
  39.  
  40. %\newtheorem{example}{Example}
  41. % Uncomment this for almost-double spacing
  42. %\renewcommand{\baselinestretch}{1.7}
  43. %\newcommand{\hozline}{\rule{\textwidth}{0.3mm}}
  44. %\newcommand{\hozline}{\makebox[\textwidth]{\hrulefill}}
  45. %\newcommand{\bex}{\begin{example} \begin{rm}}
  46. %\newcommand{\eex}{$\Box$ \end{rm} \end{example}}
  47. %\newcommand{\cbs}{\chgbarbegin}
  48. %\newcommand{\cbe}{\chgbarend}
  49. %\newcommand{\cbs}{}
  50. %\newcommand{\cbe}{}
  51.  
  52. %\newcommand{\ptag}{\begin{flushright} {\rm ($P$)} \end{flushright} }
  53.  
  54.  
  55. \begin{document}
  56.  
  57. \pagenumbering{arabic}
  58. \pagestyle{plain}
  59.  
  60. \renewcommand{\thepage}{\arabic{page}}
  61.  
  62.  
  63. %\title{The Prospero Protocol, version 5\thanks{
  64. %    This research was supported in part by the National Science
  65. %    Foundation (Grant No. CCR-8619663), the Washington Technology Center,
  66. %    Digital Equipment Corporation, and the Defense Advanced Research
  67. %    Projects Agency under NASA Cooperative Agreement NCC-2-539}
  68. %}
  69. %
  70. %\author{B. Clifford Neuman\thanks{
  71. %    To Contact the Authors: \protect\\
  72. %Electronic Mail: \protect\mbox{\protect\verb"info-prospero@isi.edu"} \\
  73. %    Telephone: +1 (310) 822-1511 \protect\\
  74. %    Mail: USC Information Sciences Institute \\
  75. %    4676 Admiralty Way \\
  76. %  Marina del Rey, California  90292--6695 U.S.A. }
  77. % \and Steven Seger Augart
  78. %\and   Information Sciences Institute \\
  79. %    University of Southern California
  80. %}
  81. %%
  82. %%
  83. %\date{
  84.  
  85. %\maketitle
  86. \begin{titlepage}
  87.  
  88. \renewcommand{\thefootnote}{}
  89. \footnotetext{\hspace*{-21pt}
  90. Digital copies of the latest revision of this document may be obtained
  91. through Prospero as
  92. \mbox{\verb"/papers/subjects/operating-systems/prospero/doc/protocol.PS.Z"},
  93. in the \mbox{\tt \#/INET/EDU/ISI/swa} virtual system, or through
  94. Anonymous FTP from \mbox{\tt PROSPERO.ISI.EDU} as
  95. \mbox{\verb"/pub/prospero/doc/prospero-protocol.PS.Z"}
  96. }
  97. \footnotetext{\hspace*{-21pt}
  98. This work was supported in part by the National Science
  99. Foundation (Grant No. CCR-8619663), the Washington Technology Center,
  100. Digital Equipment Corporation, and the Defense Advance Research
  101. Projects Agency under NASA Cooperative Agreement NCC-2-539.
  102. The views and conclusions contained in
  103. this document are those of the authors and should not be interpreted as
  104. representing the official policies, either expressed or implied, of
  105. any of the funding agencies.
  106. The authors may be reached
  107. at USC/ISI, 4676 Admiralty Way, Marina del Rey, California\ \ 90292-6695, USA.
  108. Telephone +1 (310) 822-1511, email \mbox{\verb"info-prospero@isi.edu"}.  }
  109. \renewcommand{\thefootnote}{\arabic{footnote}}
  110.  
  111.  
  112. \vspace*{\fill}
  113. \begin{center}
  114. \LARGE The Prospero Protocol\\
  115. \Large Version 5\\
  116. \vskip 1.5em
  117. {\large Draft of 12 June 1993} \\
  118. {\large Document Revision No. 0.3} \\
  119. \end{center}
  120. \vspace{.5in}
  121.  
  122. \Large \hspace*{\fill} B. Clifford Neuman
  123. %\footnotetext{\hspace*{-18pt}
  124. %    To Contact the Authors: \\
  125. %    Electronic Mail: \mbox{\verb"info-prospero@isi.edu"} \\
  126. %    Telephone: +1 (310) 822-1511 \\
  127. %    Mail: USC Information Sciences Institute, 4676 Admiralty Way,
  128. %  Marina del Rey, California  90292--6695\ \ U.S.A.
  129. %}
  130. \hfill Steven Seger Augart \hspace*{\fill} \\
  131. \vspace{.2in}
  132. \begin{center}
  133. \Large Information Sciences Institute \\
  134. University of Southern California
  135. \end{center}
  136. \vspace*{1.2in}
  137. \vspace*{\fill}
  138. \end{titlepage}
  139.  
  140. \tableofcontents
  141.  
  142. \chapter{Introduction}
  143.  
  144. This document describes version 5 of the Prospero protocol.
  145. Communication with directory servers uses a reliable delivery protocol
  146. described in Appendix~\ref{ardp}.
  147. Requests and responses are human readable commands and multiple
  148. commands may be sent in a single message.
  149.  
  150. Prospero is implemented on top of a message-based protocol to reduce the
  151. overhead that would otherwise be incurred when establishing
  152. connections to multiple directory servers.  The decision to use a
  153. message protocol directly, instead of through a higher level
  154. mechanism such as remote procedure call, was made for reasons of
  155. portability.  We did not want Prospero to depend on another protocol,
  156. software package, or other resource, unless that resource was almost
  157. universally supported by every computer on the Internet.
  158.  
  159. The use of humanly readable commands in the protocol has several
  160. advantages. It eliminates problems with byte ordering, and it makes
  161. future changes or additions to the protocol easier to incorporate
  162. while maintaining compatibility across versions; new commands or
  163. additional options to existing commands can be easily added.
  164.  
  165. The ability to request multiple operations in a single message
  166. improves performance, and it provides a simple way to request that a
  167. collection of operations (on a single server) be performed atomically.
  168.  
  169. The concept of an ``attribute'' appears frequently in the following
  170. command description.  For a discussion of attributes, read
  171. appendix~\ref{db} of this document.
  172.  
  173. \section{Additional Documents}
  174.  
  175. The Prospero documentation series will include the following:
  176. \begin{description}
  177.  
  178. \item[Prospero Protocol Specification]  You're reading it.  Right now,
  179. this is the most current document we have, but it will eventually be
  180. re-targeted towards a more specialized audience when the other guides
  181. in the series are written and revised.
  182.  
  183. \item[Prospero System User's Guide]  This will describe the general
  184. features of the Prospero system that will be common to almost all user
  185. interfaces, such as ACL types and filters.
  186.  
  187. \item[Prospero Command-Line Client User's Guide] Describes the
  188. command-line client package; this is the client that's been shipped
  189. with all Prospero releases.
  190.  
  191. \item[Prospero Gopher Client User's Guide]  This describes the
  192. Gopher menu-based client package, which is in progress.
  193.  
  194. %\item[Prospero World-Wide Web Client User's Guide]  This describes the
  195. %World-Wide Web hypertext client package, which hasn't yet been written
  196. %but is going to be done Real Soon Now.
  197.  
  198. \item[Prospero Programmer's Manual] This describes the \lit{pfs}
  199. and \lit{pcompat} libraries, which Prospero applications programmers
  200. use to interface with Prospero.
  201.  
  202. \end{description}
  203.  
  204. \chapter{Command Introduction}
  205.  
  206. \section{Spaces, quoting, and line-feeds}
  207.  
  208. Prospero messages are divided into lines.  Lines are divided into
  209. tokens.  Commands and lines sent in response are separated by an
  210. unquoted {\sc ASCII} \meta{LF} character.
  211.  
  212. Within a line, tokens are separated by unquoted horizontal whitespace
  213. (one or more {\sc ASCII} spaces and/or tabs).  Client and server
  214. implementations are not required to accept lines which begin or end
  215. with horizontal whitespace, but are encouraged to do so.  Similarly,
  216. implementations are encouraged to accept \meta{CR} or
  217. \meta{CR}\meta{LF} as alternative acceptable line terminators, but are
  218. not required to do so. 
  219.  
  220. % ``Be conservative in what you send, generous
  221. %in what you accept.'' (J. Postel)
  222.  
  223. Special characters within a command token, or null tokens, can be
  224. quoted using single quotes (\lit{'}). 
  225. While inside quotes, a quote can be included by doubling it.  The only
  226. character that cannot be quoted is the ASCII null character
  227. (character code zero; \verb"'\0'" for C programmers).  This is really
  228. a limitation of the server implementation, which passes Prospero
  229. packets, commands, and tokens around internally as null-terminated
  230. C strings.\footnote{If you wish to send binary data around, we
  231. recommend that you
  232. encode it into a null-less form using the \lit{pfs} library's
  233. \lit{binencode()} and \lit{bindecode()} routines.}
  234.  
  235. Any token may be quoted (although most will not need quoting), except
  236. for literal command tokens (\lit{VERSION}, \lit{ID}, etc.).
  237. Also, the \meta{multi-component} token uses the quoting system in a
  238. special way --- see the \lit{LIST} command for details.
  239.  
  240. \section{Options}
  241.  
  242. Many Prospero Protocol commands take options.  If multiple options are
  243. to be specified for a single command, the options are separated by a
  244. ``\lit{+}''.  If no options are specified, then the null string should be
  245. sent to indicate this.  The null string will need to be quoted, like
  246. so: \lit{'{}'}
  247.  
  248. \section{Metasyntax}
  249.  
  250. In this document, we will use some meta-syntactic features to describe
  251. commands.  Literal tokens (such as \lit{LITERAL-TOKEN}) appear in a
  252. typewriter font.  Non-terminals look like this: \meta{non-terminal}.
  253. The line-feed, carriage-return, and space characters are represented
  254. as \meta{LF}, \meta{CR}, and \meta{SPC}, respectively.  Alternation
  255. (choice among two or more possibilities) looks like:
  256. \ors\meta{option1} \metaor \meta{option2} \ore
  257.  
  258.   We also use
  259. the following meta-syntactic constructs:
  260.  
  261. %\begin{table}[htb]
  262. \begin{center}
  263. \begin{tabular}{|c|c|l|}  \hline 
  264. \multicolumn{3}{|c|}{Metasyntax used to describe commands} \\ \hline
  265. Start   & End       & \multicolumn{1}{c|}{Meaning} \\ \hline
  266. [       & ]        & One or zero repetitions. \\ \hline
  267. [       & \(]^*\)    & Zero or more repetitions. \\ \hline
  268. [       & \(]^+\)    & One repetition or more. \\ \hline
  269. \end{tabular}
  270. \end{center}
  271. %\end{table}
  272.  
  273.  
  274. \section{Objects}
  275.  
  276. A Prospero object is anything to which a normal link (\meta{link-type} =
  277. \lit{L}) can be made, except for \lit{EXTERNAL} objects.  
  278.  
  279. \subsection{Base Type\label{base type}}
  280.  
  281. Every Prospero object has one or more base types associated with it.  
  282. All Prospero objects have a base type of OBJECT.  This means that they
  283. can have attributes attached to them.  In addition, objects with a base
  284. type of FILE can store data, and objects with a base type of DIRECTORY
  285. can store directory information. 
  286.  
  287. \begin{sloppypar}
  288. The base type of a Prospero object is accessible
  289. through the \atr{base-type} intrinsic attribute.  The primitive
  290. value for \atr{base-type} is \lit{OBJECT}.  If an object's
  291. \atr{base-type} attribute has a value of %\linebreak[3]
  292. \lit{OBJECT+FILE+DIRECTORY}, 
  293. then the object can have attributes attached to it, can contain data,
  294. and can contain links.  As a shorthand, since all objects have
  295. \lit{OBJECT} as one of their base types, an object with more than one
  296. base type can have the \lit{OBJECT} implied, so that the \atr{base-type}
  297. value \lit{OBJECT+FILE+DIRECTORY} is equivalent to the value
  298. \lit{FILE+DIRECTORY} and the value \lit{FILE} is equivalent to the 
  299. value \lit{FILE+OBJECT}.  The order of values in the \atr{base-type}
  300. attribute is unimportant, so \lit{DIRECTORY+FILE} is equivalent to
  301. \lit{FILE+DIRECTORY}.
  302. \end{sloppypar}
  303.  
  304. In the rest of this document, when
  305. we say ``directory,'', we mean ``an object which has
  306. \lit{DIRECTORY} as part of its \atr{base-type}.''  When we say ``file,''
  307. we mean ``an object which has \lit{FILE} as part of its \atr{base-type}.''
  308.  
  309. One may use \lit{EDIT-OBJECT-INFO} to edit the \atr{base-type}
  310. attribute to remove the \lit{FILE} type from it only if the file is
  311. empty (zero length), and one may remove the \lit{DIRECTORY} type from
  312. it only if the directory is empty (contains no links).  To add a type
  313. to the \atr{base-type}, one must use the \lit{ADD} option to
  314. \lit{CREATE-OBJECT}.  
  315.  
  316. \subsection{Host-Specific Object Names ({\sc hsoname}s)}
  317.  
  318. Every Prospero object has an
  319. \meta{hsoname}.  {\sc hsoname}s are not guaranteed to be unique across time; if
  320. an object is deleted, 
  321. a new
  322. object may be created that re-uses the old object's handle.  However,
  323. at any particular moment, two Prospero objects on the same server are
  324. guaranteed to have unique hsonames, unless they are different versions
  325. of the same object (i.e., unless their \atr{version-number} fields are
  326. different.)
  327.  
  328. Two objects on different servers might have identical
  329. hsonames.  
  330. In the current server implementation, the \meta{hsoname-type} is always 
  331. \lit{ASCII} and the \meta{hsoname} is almost always a full
  332. (i.e., starting with a slash (\lit{/})) \unix\ 
  333. filesystem pathname.  See appendix~\ref{conventions} for more
  334. discussion of this.
  335. The \meta{hsoname-type} token exists because some special
  336. filesystems may have non-\lit{ASCII} \meta{hsoname}s.
  337.  
  338. \subsection{Versions\label{object version numbers}}
  339.  
  340. We intend to allow versioned objects.  All objects, including
  341. directories,  have a
  342. \atr{version-number} field.  In the current server
  343. implementation, the \atr{version-number} field is always zero, which means
  344. ``unversioned''.  It need not be in future server implementations.  
  345.  
  346. In commands and responses, providing a zero value for the
  347. \meta{object-version} token means to retrieve the current version of
  348. the object.  Specifying explicit values means that a particular
  349. version of the object is required.  Explicit object version numbers
  350. (when they are established) will always be positive integers.
  351.  
  352. \subsection{Object \lit{ID} fields}
  353.  
  354. The \lit{ID} field is a unique (or nearly unique)
  355. identifier for an object.  If the underlying object changes (such as
  356. by editing), then some types of \lit{ID}s will change and
  357. others will not.  If two
  358. objects have the same \lit{ID}, then they are considered by Prospero
  359. to be the same object.  This is useful for distinguishing between two
  360. cases: (a) two 
  361. links which happen to have the same \meta{name-component} but
  362. different storage locations (a different host and handle pair), and which
  363. do not actually represent the same object, and (b) two links which have the
  364. same \meta{name-component} and same \lit{ID}, but possibly different storage
  365. locations --- in case (b), the  objects are replicas and the client
  366. should access whichever one it 
  367. chooses to.  (Code is currently under development to enable
  368. servers to return a list of replicas in order of nearness to
  369. the client.)  Two links with the same \meta{name-component} and no
  370. \lit{ID} specification are considered by Prospero to be different
  371. objects, not replicas of one another.
  372.  
  373. A problem with the \lit{ID} field is that there is not an accepted
  374. standard for universal document identifiers.  An IETF working group has
  375. been formed to consider such identifiers, and the \lit{ID}
  376. field exists in anticipation of their eventual agreement upon a standard.
  377. We expect that there will be more than one type of universal document
  378. identifier; therefore, there will be more than one \meta{id-type}.
  379. Prospero supports objects with several possible \lit{ID}s.%
  380. \footnote{This will go into the user's manual when we revise it.  The
  381.   user-level names for two links distinguished only by their \lit{ID}
  382.   fields are: 
  383.   \begin{command}
  384.     \ors\meta{name-component}\lit{\#}\lit{\#}\(\mbox{\meta{id-type}}_1\)\lit{\#}\(\mbox{\meta{id-value-token}}_{1,1}\)\lit{\#}\(\mbox{\meta{id-value-token}}_{1,2}\)\ldots % permit a line break here
  385.     \lit{\#}\lit{\#}\(\mbox{\meta{id-type}}_2\)\lit{\#}\(\mbox{\meta{id-value-token}}_{2,1}\)\lit{\#}\(\mbox{\meta{id-value-token}}_{2,2}\)\ldots \\
  386.   \metaor \meta{name-component}\lit{\#}\(\mbox{\meta{id-value-token}}_1\)\lit{\#}\meta{id-value-token$_2$}\ldots \ore
  387.   \end{command}
  388.  
  389. The second form matches any \meta{id-type}.  The first form is used to
  390. explicitly specify one or more \meta{id-type}s.
  391.  
  392. }
  393.  
  394. For now, there are only two \meta{id-type}s defined.  The \lit{REMOTE}
  395. \meta{id-type} is used by the server when it has magic
  396. knowledge (perhaps through a local database) that
  397. two objects are the same.  The  \lit{REMOTE} id type is a single
  398. element which is the printed decimal representation of a positive
  399. integer.  This positive integer should be able to be stored in a 32
  400. bit integer.  A \lit{REMOTE} id value of 0 means ``unspecified''.
  401. The \lit{REMOTE} 
  402. \meta{id-type} cannot be sent across the network by clients in
  403. queries.%
  404. \footnote{The \meta{id-value} of the \lit{REMOTE} type
  405. is the same as the \meta{magic-no} token specified in version 1 of the
  406. Prospero protocol.}  It is not guaranteed to be consistent across different 
  407. queries to the server, but server implementors are encouraged to make
  408. the \meta{id-value} token consistent across queries. 
  409.  
  410. Many clients will locally generate \lit{ID} fields to
  411. help the human user differentiate between conflicting links.  These
  412. \lit{ID} fields will have an \meta{id-type} of \lit{LOCAL} and an
  413. arbitrarily generated string as their \meta{id-value}.  They may not be
  414. sent over the network, and are not guaranteed to be unique from
  415. directory read to directory read, although implementors are encouraged
  416. to make them so.  All available \lit{ID} fields will be returned with
  417. every \lit{LIST} operation.  
  418.  
  419. \chapter{Commands Reference}
  420.  
  421. All Prospero commands are listed below.
  422.  
  423. \section{VERSION}
  424.  
  425. \begin{command}
  426.  \commandsize \lit{VERSION} \meta{version-number} 
  427.     \zoos\meta{software-identifier}\zooe
  428. \end{command}
  429.  
  430. This command requests or specifies the protocol version number.  If
  431. the specified protocol version number is not supported, the response
  432. will be:
  433.  
  434. \begin{command}
  435.  \lit{VERSION-NOT-SUPPORTED TRY} \meta{min-version-number}\lit{-}\meta{max-version-number}
  436. \end{command}
  437. or
  438. \begin{command}
  439.   \lit{VERSION-NOT-SUPPORTED TRY} \meta{version-number}
  440. \end{command}
  441.  
  442.  
  443.  
  444. Where \meta{version-number} or
  445. \meta{min-version-number}\lit{-}\meta{max-version-number} are those
  446. versions that are supported.   
  447. If no arguments are supplied (or if the argument is not a 
  448. number), then the \lit{VERSION} command will return the current
  449. protocol version number being used by the server in the form:
  450.  
  451. \begin{command}
  452.   \lit{VERSION} \meta{version-number} \zoos\meta{software-identifier}\zooe 
  453. \end{command}
  454.  
  455. If the \meta{software-identifier} is specified, it identifies
  456. the software and version of the software that is generating the
  457. message.\footnote{Software developers wishing to obtain software
  458. identifiers should send electronic mail to {\tt pfs-administrator@isi.edu}.}
  459.  
  460. \section{AUTHENTICATE}
  461.  
  462. \begin{command}
  463.   \commandsize \lit{AUTHENTICATE} \meta{options} \meta{authenticator-type}
  464.     \meta{authentication-data} \zoms\meta{principal-name}\zome
  465. \end{command}
  466.  
  467. This command authenticates the principal making the request.  The
  468. \meta{authenticator-type} is the type of the authenticator.  It might
  469. be a password, a Kerberos 
  470. authenticator, or data used by an alternative authentication
  471. mechanism.  The currently supported values for
  472. \meta{authenticator-type} are \lit{UNAUTHENTICATED}, \lit{KERBEROS},
  473. and \lit{HANDLE}.
  474.  
  475. If the \meta{authenticator-type} is \lit{UNAUTHENTICATED}, this is
  476. honored by the \lit{ASRTHOST} ACL type.  It is also honored by the \lit{TRSTHOST} ACL
  477. type if the client is
  478. using a privileged port.  If the \meta{authenticator-type} is 
  479. \lit{UNAUTHENTICATED}, then the \meta{authentication-data} should be
  480. the username of the user running the client.  This username is be the
  481. principal referred to by the ACL.  
  482.  
  483. If the \meta{authenticator-type} is \lit{KERBEROS}, then the
  484. \meta{authentication-data} is a Kerberos authentication message
  485. authenticating the 
  486. principal to the Prospero server.  The ACL principal will be the same as the
  487. Kerberos principal.  The ACL type will be \lit{AUTHENT} \lit{KERBEROS}.
  488.  
  489. If the \meta{authenticator-type} is \lit{HANDLE}, then the
  490. \meta{authentication-data} is a handle returned in response to a
  491. previous \lit{AUTHENTICATE} command.  
  492.  
  493. The optional \meta{principal-name}s are informational only for some
  494. authentication types, and exist only for human convenience.  The
  495. server will extract the principal names from the
  496. \meta{authentication-data}, but the names might be encrypted in the
  497. \meta{authentication-data} or otherwise represented in a way that
  498. humans cannot easily decipher them.  (For instance, this is the case
  499. with Kerberos version 5.)  In the case of the \lit{P\_PASSWORD}
  500. authentication type, the \meta{principal-name}s are not optional.
  501.  
  502. More than one \lit{AUTHENTICATE} command may be sent in a single
  503. message.  This can be used both to authenticate oneself as multiple
  504. simultaneous principals and to authenticate oneself using several methods.
  505.  
  506. The response may take one of several forms.  If the authentication
  507. fails, then the response is:
  508. \begin{command}
  509. \lit{FAILURE} \lit{AUTHENTICATION-DATA} \zoos\text{explanatory text}\zooe
  510. \end{command}
  511. One might get this response if an authentication handle has expired.
  512.  
  513. If it is computationally expensive for the server to validate the
  514. authentication data, it may want to cache the fact that the data has
  515. been validated, and return a handle that the client may use in future
  516. requests to the server:
  517. \begin{command}
  518. \lit{AUTHENTICATED} \zoos\meta{authentication-handle} 
  519.  \zoos\meta{handle-expiration-time}\zooe \zooe
  520. \end{command}
  521. The \meta{handle-expiration-time}, if provided, is in ASN-TIME format.
  522.  
  523. The response may be another \lit {AUTHENTICATE} command if the server
  524. needs to authenticate itself to the client.\footnote{XXX: Not
  525. currently implemented.}  The response may simply be:
  526. \begin{command}
  527.         \lit{AUTHENTICATED}
  528. \end{command}
  529. to indicate that the authentication succeeded.  If other commands are
  530. included in the same packet as the \lit{AUTHENTICATE} request (this
  531. will almost always be the case), then successful execution of theose
  532. other commands implies that the authentication succeeded; in this case,
  533. the server is not required to include the \lit{AUTHENTICATED} response.
  534.  
  535. Currently, no options are defined, so the \meta{options} token is
  536. always the null string.
  537.  
  538. \section{DIRECTORY}
  539.  
  540. \begin{command}
  541.   \commandsize \lit{DIRECTORY} \meta{hsoname-type} \meta{hsoname}
  542.     \zoos\meta{object-version}\zooe \selectlines
  543. \end{command}
  544.  
  545.  
  546. This command specifies the directory to be read or modified by the
  547. commands that follow as part of the same request.  This command
  548. does not generate a response unless the selected directory is not a
  549. directory.  In that case, the response:
  550. \begin{command}
  551.   \lit{FAILURE NOT-A-DIRECTORY}
  552. \end{command}
  553. is returned, and the remainder of the request ignored.
  554.  
  555. \section{ATOMIC}
  556.  
  557. \begin{command}
  558.   \commandsize \lit{ATOMIC}
  559. \end{command}
  560.  
  561. This command specifies that all commands that follow are to be
  562. completed atomically.  If one of the commands fails, then none of the
  563. commands are to have an effect.  This may require undoing the effects
  564. of commands which have already completed.  Note that this command works
  565. only for requests issued in the same message, and all commands must
  566. be executable on the single server to which the message was sent.
  567.  
  568. This command is not currently implemented.
  569.  
  570. \section{LIST}
  571.  
  572. \begin{command}
  573.   \commandsize \lit{LIST} \meta{options} \lit{COMPONENTS}
  574.     \zoms\meta{name-component}\zome\selectlines\meta{LF}\\
  575.     \lit{FILTER} ... 
  576. \end{command}
  577.  
  578. \lit{LIST} is used to look up information stored in a directory.  It
  579. must be preceded by a \lit{DIRECTORY} command in the same request.  Each
  580. optional \meta{name-component} is a component of a
  581. multiple-component name relative to the directory specified in the
  582. \lit{DIRECTORY} command.  The last component may include wildcards.  If no
  583. \meta{name-component} is specified, the wildcard ``*'' is implied
  584. (i.e., all listable components in the directory will be listed).\footnote{
  585. The protocol is currently in transition.  The old format was as
  586. follows:
  587. Multiple component names are allowed, and are specified as a single
  588. token following the \meta{name-component}.  The multiple components within
  589. a single name are separated by the unquoted slash (\lit{/}).  Servers
  590. and clients for now are accepting both versions of the protocol
  591. message, which means that the 1st component of a multiple-component
  592. name must be quoted if it contains a slash.}
  593.   If the result of
  594. the lookup of one component is another directory at the same storage
  595. site, then the directory server will repeat the process and look up
  596. the next component.  When a lookup results in a dead-end, or a
  597. directory at another site, the server will return an \lit{UNRESOLVED}
  598. message, indicating which components remain to be resolved by the client.
  599.  
  600. If a space, tab, slash, or \meta{LF} is to be included in a component
  601. of a single-component or multi-component name, the component must be
  602. quoted.  Quoting a slash in a single-component or multi-component name
  603. means that the slash is not considered to separate components of a
  604. multi-component name, but rather to be a part of a single component.
  605. This somewhat awkward syntax allows us to have single components
  606. which contain slashes or horizontal whitespace or \meta{LF}s.
  607.  
  608. \subsection{Wildcards}
  609.  
  610. The \meta{name} tokens in the \lit{LIST} command are the
  611. only places in the Prospero protocol where components may be specified
  612. with wildcards.    There are two wildcard characters supported:
  613. \begin{description}
  614. \item[\lit{*}] Match zero or more characters.   
  615. \item[\lit{?}] Match exactly one character.  
  616. \end{description}
  617. Wildcards may only be used to expand at a single-component level; by
  618. this, we mean that the wildcarded \meta{name}
  619. \lit{foo?bar} would match the single-component name whose name in
  620. the current directory was \lit{foo-bar},
  621. but would not match the object whose multiple-component name in the
  622. current directory was \verb"foo/bar".
  623.  
  624. One may also wildcard a name by giving a full regular expression.  To
  625. do this, the regular expression should be enclosed within parentheses.
  626. For instance, specifying (Anne.*) is equivalent to specifying the
  627. wildcarded name 'Anne*'.  
  628.  
  629. In addition to any wildcards specified, a literal match for the
  630. wildcard will also happen.
  631.  
  632. \subsection{Options}
  633.  
  634. \meta{options} contains a (possibly empty) list of options to the
  635. \lit{LIST} command.  If no options are specified, an empty
  636. list of options should be sent as
  637. a null token (\lit{'{}'}.)
  638.  
  639. \subsubsection{Miscellaneous Options}
  640.  
  641. Among the options supported are \lit{EXPAND} which tells the remote directory
  642. server to expand any union entries in the directory.  By default, the
  643. response will contain the names of union links to be included, and the
  644. client must submit a new query.  A directory server can ignore the
  645. \lit{EXPAND} option to the list command if it so desires.  The \lit{LEXPAND}
  646. option is the same as \lit{EXPAND}, but indicates that the server should
  647. only expand union entries for local directories.  The \lit{LEXPAND} option
  648. is implied if a multiple component name is being resolved.
  649.  
  650. The \lit{VERIFY} option tells the remote server that the purpose of the
  651. query is to verify whether the remote directory exists and is a
  652. directory.  No components are to be returned; instead, the message
  653. returned on success is \lit{NONE-FOUND}.
  654.  
  655. \subsubsection{\protect\lit{ATTRIBUTES} option}
  656.  
  657. The \lit{ATTRIBUTES} option indicates that the attributes associated with
  658. the link are to be returned.  (If the object is on the same host as
  659. the directory, then the server may ignore CACHED attributes and return
  660. OBJECT attributes instead.
  661.  
  662.   \lit{ATTRIBUTES} is optionally immediately
  663. followed by an argument list, which is a parenthesized \mbox{\lit{+}-se}para\-ted
  664. list of attributes to be 
  665. returned.  If the \lit{ATTRIBUTES} option is specified without any
  666. attributes requested, then it is just the same as if one had specified
  667. \lit{ATTRIBUTES(\#INTERESTING)}.  Note that union links do not
  668. normally have any interesting attributes attached to them, except
  669. for \lit{FILTER}.
  670.  
  671. \lit{ATTRIBUTES(ID+FILTER)} is always implied.  For \lit{EXTERNAL}
  672. links, \lit{ATTRIBUTES(ACCESS-METHOD)} is always implied.\footnote{
  673.     This restriction seems odd, but it makes certain details of
  674. programming the client libraries much easier.} 
  675.  
  676. There are some special arguments to the
  677. \lit{ATTRIBUTES} option.  It is not a good idea for application-defined
  678. attributes to have names that conflict with these special arguments; if
  679. there are such application-defined attributes, you may have to use the
  680. \lit{\#ALL} special argument to look at their values.  More than one
  681. special argument may be specified, and one may mix special and
  682. non-special arguments.  Also, note that it is never erroneous
  683. for a server to return more attributes
  684. than were asked for, nor is it erroneous for a server to return
  685. attribute information even if no \lit{ATTRIBUTES} option was specified
  686. to the \lit{LIST} command.  A server that always behaved as if the
  687. \lit{ATTRIBUTES(\#ALL)} option were specified would be behaving
  688. legally, although it would not be terribly efficient. 
  689.  
  690. \begin{description}
  691.   \item[\lit{\#INTERESTING}] Return only interesting attributes.  What
  692.     constitutes an ``interesting'' attribute is server-dependent.
  693.     This allows one to use Prospero for special applications.
  694.   \item[\lit{\#ALL}] If this argument is specified, and the object resides
  695. on the same host as 
  696. the link, then the attributes stored with the object referenced by the
  697. link will be returned in addition to those stored with the link, and
  698. no cached attributes will be returned (they would be irrelevant).  If
  699. the object resides on a host different from the link, then all
  700. attributes stored with the link are returned, but not those stored
  701. with the object referenced by the link.
  702.    \item[\lit{\#CACHED}] Return all attributes of type \lit{CACHED}.
  703. If you specify \lit{\#CACHED} with \lit{\#ALL}, the server will return cached
  704. attributes in addition to those that would be returned if you'd just
  705. specified \lit{\#ALL}.  It is not clear how useful this behavior is.
  706.    \item[\lit{\#OBJECT}] Return all attributes of type \lit{OBJECT}.  Note that
  707. this will not work if the object does not reside on the same host as
  708. the link.
  709.    \item[\lit{\#ADDITIONAL}] Return all \lit{ADDITIONAL} attributes
  710.    \item[\lit{\#REPLACEMENT}] Return all \lit{REPLACEMENT} attributes.
  711.    \item[\lit{\#LINK}] Return all \lit{LINK} attributes.
  712.    \item[\lit{\#FIELD}] Return all fields (all system-defined standard
  713. attributes), except for ones that have already been returned as part of
  714. the \lit{LINK} response, such as \atr{host}, \atr{handle}, and
  715. \atr{dest-exp}.
  716.    \item[\lit{\#\#FIELD}] Return all fields.  (This option will be
  717. rarely used.)
  718.    \item[\lit{\#APPLICATION}] Return all application-defined
  719. attributes.
  720. \end{description}
  721.  
  722. \subsubsection{\protect\lit{FILTER} option}
  723.  
  724. If the \lit{FILTER} option is specified, the \lit{LIST} command will
  725. be followed by one or more lines representing one or more
  726. \lit{PREDEFINED} filters to
  727. be applied at the server.
  728.  
  729. The filters are applied in the order in which they follow the
  730. \lit{LIST} command.  Their format is just like that of 
  731. \lit{FILTER} information returned from the \lit{LIST} command (see
  732. subsection~\ref{filter}), except that the \meta{execution-location} field must always
  733. be \lit{SERVER}, and the first four tokens (``\lit{ATTRIBUTE LINK
  734. FIELD FILTER}'') are omitted.  The format is:
  735. \begin{command}
  736.   \lit{FILTER} \meta{filter-type} \lit{SERVER} \meta{pre-or-post}
  737. \lit{PREDEFINED} \meta{filter-name} \\
  738.              \zoos \lit{ARGS} \zoms\meta{filter-arg}\zome \zooe
  739. \end{command}
  740. The server will know that there are no more filter-specifying lines
  741. either when the end of the message is reached or it encounters a line
  742. that does not begin with the token \lit{FILTER}.
  743.  
  744. \subsection{Returned Information}
  745.  
  746. On failure, a standard error response will be returned.  On success,
  747. the response will be a sequence of entries containing information
  748. about the requested files.
  749.  
  750. \subsubsection{Links}
  751.  
  752. \begin{command}
  753.   \lit{LINK} \meta{link-type} \meta{target} \meta{name-component} \meta{host-type} \meta{host-name} 
  754.     \meta{hsoname-type} \meta{hsoname} \meta{object-version}
  755.      [ \lit{DEST-EXP} \meta{dest-expiration} ]
  756. \end{command}
  757.  
  758. In the case of links to objects, \meta{dest-expiration} is the value
  759. of the object's \atr{dest-exp} field.  
  760.  
  761. The \meta{link-type}
  762. token is defined as follows:
  763. \begin{description}
  764. \item[\lit{L}] Normal link (Symbolic link, link to a Prospero object,
  765. or link to an external object)
  766. \item[\lit{U}] Union link to a directory
  767. \end{description}
  768.  
  769. The \meta{target} token is defined as follows: \label{target-token}(Also see
  770. the discussion of this in section~\ref{target-attribute}.
  771. A link may be a link to an object.  In this case, the value of the
  772. \meta{target} token will be the same as the value of the
  773. object's \atr{base-type} attribute\footnote{For an explanation, see
  774. section~\ref{base type}.}
  775. (that is, \lit{OBJECT}, \lit{FILE},
  776. \lit{DIRECTORY}, or \lit{DIRECTORY+FILE}.)  Other values for
  777. \meta{target} are:
  778. \begin{description}
  779. \item[\lit{SYMBOLIC}] Symbolic link.  The \meta{host-type} token will be
  780.   \lit{VIRTUAL-SYSTEM}, the \meta{host-name} token will be the name of
  781.  the virtual system being linked to (specified as a path within the
  782.  current virtual system --- we usually use the conventional ugly-name of
  783.  the virtual system), the \meta{hsoname-type} will be \lit{ASCII},
  784.  and the \meta{hsoname} will be 
  785.  the full pathname of the object being linked to within the virtual
  786.  system.
  787.  
  788. \item[\lit{EXTERNAL}] This is a link to an object which is not stored on a
  789. host running Prospero.   Unlike other types of links, \lit{EXTERNAL}
  790. links have an \atr{access-method}%
  791. \footnote{See
  792.  section~\ref{access-method} for a description of the
  793.  \atr{access-method} field.} 
  794. attribute which is returned as a cached attribute.
  795. This is because \lit{EXTERNAL} links
  796. cannot have any object attributes.  Therefore, if one wishes to add
  797. attributes to an \lit{EXTERNAL} link that would normally be object
  798. attributes, one must specify them as \lit{CACHED}, \lit{ADDITIONAL}, or
  799. \lit{REPLACEMENT} attributes.
  800. \end{description}
  801.  
  802.  
  803. If the principal requesting the listing has no read access to a link,
  804. all fields in the link except for \meta{name-component} will be
  805. returned with the token \lit{NULL}, which is not otherwise valid in a
  806. returned link.
  807.  
  808. \subsubsection{Link Attributes\label{Link Attributes}}
  809.  
  810. If attributes were requested, the link will be followed by lines that
  811. specify the values of the requested attributes.  The form of the
  812. response will depend on whether the attribute is associated with the
  813. link, or with the actual object.  If the attribute is associated with
  814. the link, the \meta{applies-to} token indicates whether it applies to the
  815. \lit{LINK} or the object, and if the object whether it is a \lit{CACHED}
  816. attribute, a \lit{REPLACEMENT} attribute, or an \lit{ADDITIONAL} attribute.  In
  817. case of conflicts between attributes associated with the link and
  818. those associated with the object, a cached attribute is superseded, a
  819. replacement attribute takes precedence, and an additional attributes
  820. leaves both intact.  
  821.  
  822. Attributes may sometimes be returned even if they were not explicitly
  823. requested.  As a case of this, the \atr{ACCESS-METHOD} attribute is
  824. always returned for \lit{EXTERNAL} links.
  825.  
  826. \begin{command}
  827.   \ors \lit{ATTRIBUTE} \meta{applies-to} 
  828.     \lit{FIELD} \meta{attribute-name} 
  829.     \ooms\meta{value-tuple-element}\oome%
  830. \\
  831. \metaor \\
  832. \lit{ATTRIBUTE} \meta{applies-to} 
  833.     \ors \lit{APPLICATION} \metaor \lit{INTRINSIC} \ore
  834.     \meta{attribute-name} \meta{attribute-value-type}
  835.     \ooms\meta{value-tuple-element}\oome \ore
  836. \end{command}
  837. \footnote{{\bf CHANGE IN FORMAT}:  It used to be the case that the
  838.   line returned for FIELD attributes did not include an
  839.   \meta{attribute-type} token.  This has been changed.  The older
  840.    format will continue to work until all Prospero applications before
  841. Alpha.5.1 are gone.
  842. }
  843.  
  844. Attributes may have multiple values, in which case one \lit{ATTRIBUTE}
  845. line is returned for each value.  In the case of multiple values, the
  846. order in which attributes is returned may be significant to the
  847. application.  The Prospero server will maintain the order
  848. of attributes.  
  849.  
  850. \meta{attribute-value-type}s are \lit{SEQUENCE},
  851. \lit{LINK}, and \lit{FILTER}.  \lit{SEQUENCE} is the most general
  852. \meta{attribute-value-type}.  It is  a sequence of zero or more ASCII
  853. strings, and all other attribute value types are subtypes of it.
  854. Since application attributes are, by definition, application-specific,
  855. we are not constraining the form of a sequence.  However, if an
  856. application wishes to use application-specific subtypes of
  857. \lit{SEQUENCE}, we encourage application authors to use the first
  858. element of the attribute's value as a keyword describing the particular
  859. subtype of \lit{SEQUENCE}.  
  860.  
  861. One possible \meta{attribute-value-type} is \lit{LINK}.    The
  862. \meta{value-tuple-element} tokens returned in this case are the same as
  863. the \lit{LINK} response to the \lit{LIST} command. 
  864. In that
  865. case, the \meta{name-component} token will be ignored, and will usually be
  866. a zero-length string (\lit{'{}'}).)  The return format would be:
  867.  
  868. \begin{command}
  869. \lit{ATTRIBUTE} \meta{applies-to} \lit{APPLICATION} \meta{attribute-name}  
  870.     \lit{LINK} \ors \lit{L} \metaor \lit{U}\ore \meta{target} \meta{name-component} \meta{host-type} \meta{host-name} 
  871.     \meta{hsoname-type} \meta{hsoname} \meta{object-version}
  872.      \zoos \lit{DEST-EXP} \meta{dest-expiration} \zooe 
  873. \end{command}
  874.  
  875.  
  876. If the value of an attribute is a link, the link might itself have
  877. attributes.  When such sub-attributes are returned, the word
  878. \lit{ATTRIBUTE} is immediately followed by \lit{>} signs to the
  879. appropriate nexting level.   If a link attribute has sub-attributes,
  880. they will all be sent with the link.
  881.  
  882. All available \lit{ID} fields will always be returned with
  883. every \lit{LIST} operation, using the \lit{ID} return
  884. format.\footnote{Please note again that ID fields have not been
  885. fully implemented, in the absence of an appropriate standard; comments about them in this document are subject to
  886. change.} 
  887.  
  888.  
  889. \subsubsection{Filters\label{filter}}
  890.  
  891. User-defined attributes and the field \atr{filter} may have the
  892. \meta{attribute-value-type} of \lit{FILTER}.\footnote{
  893.     XXX: This should go into the attribute documentation
  894. }  If a link has one or more filters attached to it, they are
  895. specified as one or more instances of the link's \atr{filter} field.  
  896. One \lit{ATTRIBUTE} line will always be returned for each
  897. filter.  The 
  898. lines are returned in the same order in which the filters will be
  899. applied to the link.  The return format is:
  900.  
  901. \begin{command}
  902.   \lit{ATTRIBUTE}\zoms\lit{>}\zome \lit{LINK FIELD FILTER} \meta{filter-type}
  903.     \meta{execution-location} \meta{pre-or-post} \\
  904. \ors\lit{PREDEFINED} \meta{filter-name} \\
  905. \metaor\ 
  906.     \lit{LINK} \lit{L} \meta{target} \meta{name-component} \meta{host-type} \meta{host-name} 
  907.     \meta{hsoname-type} \meta{hsoname} \meta{object-version}
  908.      \zoos \lit{DEST-EXP} \meta{dest-expiration} \zooe \ore 
  909.     \zoms\lit{ID} \meta{id} \meta{info}\zome \\
  910.          \zoos \lit{ARGS} \zoms\meta{filter-arg}\zome \zooe
  911. \end{command}
  912.  
  913. The values for \meta{filter-type} are: \lit{DIRECTORY}, filter is
  914. applied to the 
  915. current directory; \lit{HIERARCHY}, filter is applied to all directories
  916. reachable through the filtered link; \lit{OBJECT} filter is applied to an
  917. object other than a directory; \lit{UPDATE}, filter is applied when
  918. updating the directory.
  919.  
  920. \meta{execution-location} refers to where the filter will be executed.
  921. Filters are usually executed on the \lit{CLIENT}, but may be executed
  922. on the \lit{SERVER}.
  923.  
  924. \meta{pre-or-post} is \lit{PRE} if the filter is to be applied before
  925. union links are expanded and \lit{POST} if the filter is to be applied
  926. after union links are expanded.  \lit{POST} is the common case for
  927. client filters.  Server filters must be \lit{PRE} at this time, since
  928. the server does not yet perform remote expansion of union links.
  929.  
  930. Filters may be \lit{PREDEFINED}, which means that it is expected that
  931. the appropriate client or server will understand the predefined name, or
  932. they may be \lit{LOADABLE}, which means that they are object 
  933. code that will be dynamically linked with the client or
  934. server.\footnote{
  935.  The security issues with loadable filters have
  936.  not yet been fully addressed.  Partly because of this,  right now, all
  937.  implementations except for the VAX implementation will only support
  938.  \lit{PREDEFINED} filters, and even the VAX implementation is not
  939.  configured to support loadable filters unless you specially compile it
  940.  to do so.
  941. }  
  942. There may also be server-specific \lit{PREDEFINED} filters
  943. for special applications (such as Archie).  Their
  944. \meta{execution-location} will always be \lit{SERVER}.
  945.  
  946. One may specify zero or more arguments to the filter, following the
  947. \lit{ARGS} keyword.
  948.  
  949. \subsubsection{Unresolved Components}
  950.  
  951. An \lit{UNRESOLVED} response lists the components of the name that must be
  952. further resolved relative to the immediately preceding \lit{LINK}
  953. response or responses, and is used when not all components of a
  954. multiple-component name were resolved. 
  955.  
  956. \begin{command}
  957.   \lit{UNRESOLVED} \meta{components}
  958. \end{command}
  959.  
  960. The text of the \meta{components} must be a proper suffix of
  961. multiple-component name sent across as an argument to the \lit{LIST}
  962. command.  For instance, to the command 
  963.  
  964. \begin{command}
  965. \lit{LIST '' COMPONENTS ulink-test2/murali/ROOT}
  966. \end{command}
  967.  
  968. the only two legal \lit{UNRESOLVED} responses are 
  969. \begin{command}
  970.   \lit{UNRESOLVED} \lit{murali/ROOT}
  971.   \lit{UNRESOLVED} \lit{ROOT}
  972. \end{command}
  973.  
  974. \subsubsection{No files found}
  975.  
  976. If no files are found, the reply will be:
  977.  
  978. \begin{command}
  979.   \lit{NONE-FOUND}
  980. \end{command}
  981.  
  982. \section{LIST-ACL}
  983.  
  984. \begin{command}
  985. \commandsize
  986. \lit{LIST-ACL} \meta{options} \zoos\meta{name-component}\zooe\selectlines
  987. \end{command}
  988.  
  989. This request is used to list the access control list for the directory
  990. specified in the previous \lit{DIRECTORY} command, or for a link within the
  991. directory.  The optional component is required only if requesting the
  992. \lit{ACL} for a link within the directory (option = \lit{LINK}).  It is to be left
  993. out when requesting the \lit{ACL} for the directory itself
  994. (option = \lit{DIRECTORY}).    
  995.  
  996. The response will be zero or more lines of the form:
  997.  
  998. \begin{command}
  999.   \lit{ACL} \meta{entry-type} \zoos\meta{authentication-type} 
  1000.     \zoos\meta{rights} \zoms\meta{principal-name}\zome\zooe\zooe
  1001. \end{command}
  1002.  
  1003. If no \lit{ACL} entries are listed, then the response is \lit{SUCCESS}.
  1004. Fields inappropriate to a particular \meta{entry-type} need not be
  1005. sent, but if they are sent, they should be sent as a zero-length
  1006. string.  For instance, the \lit{DEFAULT}, \lit{SYSTEM}, and
  1007. \lit{DIRECTORY} ACL types do not use the \meta{authentication-type},
  1008. \meta{rights}, and \meta{principal-name} fields.
  1009.  
  1010. If the ACL's permissions state that it cannot be viewed (\lit{v} or
  1011. \lit{V} permission), then the
  1012. response is  
  1013. \begin{command}
  1014.   \lit{FAILURE} \lit{NOT-AUTHORIZED} \zoos\text{optional multi-token explanatory text.}\zooe
  1015. \end{command}
  1016.  
  1017. Possible values for \meta{entry-type} include \lit{NONE} (allows
  1018. access to no principals; in other words, it's a no-op), \lit{ANY}
  1019. (grants access to all 
  1020. principals), \lit{OWNER} (grants access to the principal specified by
  1021. the link or object's \atr{owner} field; i.e., the one who owns the
  1022. link or object),  
  1023. \lit{NAMED}, %(formerly called \lit{LGROUP}),
  1024. \lit{GROUP} (In this case, the \meta{authentication-type} token
  1025. represents the group certification method),
  1026. \lit{DIRECTORY}, \lit{DEFAULT}, \lit{SYSTEM}, \lit{AUTHENT} (means
  1027. that an 
  1028. authentication method is used; the \meta{authentication-type} token
  1029. specifies the 
  1030. authentication method.  The only currently supported value for
  1031. \meta{authentication-type} is \lit{KERBEROS}.),  \lit{ASRTHOST}, and
  1032. \lit{TRSTHOST}.  An example:  
  1033. \begin{command}
  1034. \tt
  1035. ACL ANY '{}' rlvY \\
  1036. ACL ASRTHOST '{}' ALRMDI prospero \\
  1037. ACL AUTHENT KERBEROS ALRMDI swa@ISI.EDU bcn@ISI.EDU \\
  1038. ACL DEFAULT '{}' '{}' \\
  1039. ACL SYSTEM '{}' '{}' \\
  1040. \end{command}
  1041.  
  1042. We interpret a null link ACL as the \lit{DIRECTORY} ACL.  
  1043. We interpret a null directory ACL as the \lit{DEFAULT} ACL.
  1044.  
  1045. See the Prospero User's Manual for a discussion of the order of
  1046. evaluation of ACLs.
  1047.  
  1048. If we want to find out the value of a \lit{NAMED} ACL (named ACLs are
  1049. shorthand for longer lists, and are local to the server) (\lit{XXX} this
  1050. should go into the user's manual), then we use
  1051. the \lit{NAMED} option, and the 
  1052. \meta{name-component} is replaced with the (possibly quoted) name
  1053. of the named ACL.   Note that named ACLs are not currently supported.
  1054.  
  1055. If we want to find out the value of an included ACL (Currently, the
  1056. only included ACLs are \lit{SYSTEM}, \lit{DEFAULT}, and \lit{OVERRIDE}.  \lit{DIRECTORY} is
  1057. also an included ACL for the purposes of the protocol, but the value
  1058. of the \lit{DIRECTORY} ACL will change from directory to directory, and
  1059. therefore it is not a server-wide stable name.) \footnote{XXX: this
  1060. information will go into the user's manual when we revise it}, then we use
  1061. the \lit{INCLUDED} option, and the 
  1062. \meta{name-component} is replaced with the name
  1063. of the included ACL.   Note that retrieval of included ACLs is not
  1064. currently supported. 
  1065.  
  1066. If we want the ACL for a filesystem object (instead of for a link or
  1067. directory), then we use the \lit{OBJECT} option, and the
  1068. \meta{name-component} is replaced with \meta{hsoname-type}
  1069. \meta{hsoname} \zoos\meta{object-version}\zooe.  Object ACLs are not currently implemented, because
  1070. they wouldn't do anything useful --- we currently do not have an
  1071. access method which understands Prospero ACLs.
  1072.  
  1073. Within the Prospero protocol, the quoting mechanism works on principal
  1074. names, and works recursively for distinguishing components of
  1075. principal names.  (This is currently only used by Kerberos, but may also
  1076. be needed by other authentication mechanisms.)
  1077.  
  1078. See the Prospero User's manual for a further discussion of ACLs.
  1079.  
  1080. \section{GET-OBJECT-INFO}
  1081.  
  1082. \begin{command}
  1083. \commandsize
  1084. \lit{GET-OBJECT-INFO} \meta{requested-attributes} 
  1085. \meta{hsoname-type} \meta{hsoname}
  1086. \meta{object-version}\selectlines
  1087. \end{command}
  1088.  
  1089. This command requests information about an object.
  1090. \meta{requested-attributes} is a list of those attributes
  1091. that are desired.  Multiple attributes may be separated by ``\lit{+}'' signs
  1092. (with no intervening white space), just as options lists are
  1093. separated.
  1094.  
  1095. Special attribute names may be specified, just as they may be for the
  1096. \lit{LIST} command.  The special names are: \lit{\#OBJECT} (synonymous
  1097. with \lit{\#ALL}), \lit{\#FIELD}, \lit{\#INTERESTING}, \lit{\#ALL}, and
  1098. \lit{\#APPLICATION}. 
  1099.  
  1100. The response can be multiple lines, each containing a value for an
  1101. attribute.  The response will be the same as for the \lit{ATTRIBUTE}
  1102. option to the \lit{LIST} command.  However, the \meta{applies-to}
  1103. field will always be \lit{OBJECT}
  1104.  
  1105. An object that has migrated to another host may have its
  1106. \atr{forwarding-pointer} attribute queried with \lit{GET-OBJECT-INFO},
  1107. but attempts to retrieve any other attributes will return a
  1108. \lit{FORWARDED} message.
  1109.  
  1110. If no matching attributes for the object were found, the response is
  1111. \lit{NONE-FOUND}. 
  1112.  
  1113. \section{EDIT-OBJECT-INFO}
  1114.  
  1115. \begin{command}
  1116.   \commandsize
  1117.   \lit{EDIT-OBJECT-INFO} \meta{modification-request}
  1118. \meta{hsoname-type} \meta{hsoname} 
  1119. \end{command}
  1120.  
  1121. This command is used to change the attributes of a Prospero object.
  1122. It is followed by an arbitrary (zero or more) number of
  1123. \lit{ATTRIBUTE} specification lines.  See the
  1124. \lit{LIST} command for a definition of these lines.    The
  1125. \meta{applies-to} will always be \lit{OBJECT}.
  1126.  
  1127. In the command, one may request to add a new instance of an attribute, delete
  1128. an instance, delete all instances, or replace all instances.  The
  1129. \meta{modification-request} will be \lit{ADD}, \lit{DELETE},
  1130. \lit{DELETE-ALL}, or \lit{REPLACE}.  If you want to do more than one
  1131. thing to an object in 
  1132. the same request (e.g., if you want to add one attribute instance and
  1133. replace another), and you want to avoid letting the object exist in an
  1134. intermediate and possibly inconsistent state, then you can send two
  1135. \lit{EDIT-OBJECT-INFO} commands in the same message, along with the
  1136. \lit{ATOMIC} command.
  1137.  
  1138. If you are deleting all instances of an attribute, then the
  1139. \meta{attribute-value} you specify in your \lit{ATTRIBUTE}
  1140. specification lines will be ignored, and will usually just be the null
  1141. string.  \lit{DELETE-ALL} just checks for matches on the attribute
  1142. name and the attribute namespace (\lit{APPLICATION}, \lit{FIELD}, or
  1143. \lit{INTRINSIC}). 
  1144.  
  1145. \lit{DELETE}, on the other hand, checks for an exact match on the
  1146. attribute name, namespace, type, and value.  (The current
  1147. implementation does not check for sub-attributes of a value of type
  1148. link.  
  1149.  
  1150. \lit{REPLACE} may
  1151. be specified even if the attribute does not yet have any instances
  1152. specified for it.
  1153.  
  1154. One may use \lit{EDIT-OBJECT-INFO} to edit the \atr{base-type}
  1155. attribute to remove the \lit{FILE} type from it only if the file is
  1156. empty (zero length), and one may remove the \lit{DIRECTORY} type from
  1157. it only if the directory is empty (contains no links).
  1158.  
  1159.  
  1160. \section{CREATE-LINK}
  1161.  
  1162. \begin{command}
  1163.   \commandsize
  1164.     \lit{CREATE-LINK} \meta{options} \ors \lit{L} \metaor \lit{U} \ore 
  1165.     \meta{name-component}
  1166. \meta{target} \meta{host-type} \meta{host-name} \meta{hsoname-type}
  1167. \meta{hsoname} \meta{object-version}  
  1168. \zoos\lit{ID} \meta{id-type} \meta{id-value}\zooe
  1169. \end{command}
  1170.  
  1171. This command creates a new link in the current directory.   The
  1172. \meta{name-component} may not be null, even if the link is a union link.  
  1173. If filters
  1174. or other information must be added, the \lit{EDIT-LINK-INFO} command should be
  1175. used once the link has been created.
  1176.  
  1177. The \meta{options} may include \lit{REPLICA} to add
  1178. a link to a directory that already contains a link with the same
  1179. \meta{name-component}.  \lit{REPLICA}  indicates  that the new link
  1180. and the existing link or links with which it conflicts are replicas.
  1181. Normally, if one attempts to add a link with a conflicting
  1182. \meta{name-component}, the response is: 
  1183. \begin{command}
  1184. \lit{FAILURE ALREADY-EXISTS}
  1185. \end{command}
  1186. if the new link duplicates an existing link (if all of the arguments
  1187. to it are the same as those of an existing link), and
  1188. \begin{command}
  1189. \lit{FAILURE NAME-CONFLICT}
  1190. \end{command}
  1191. if the new link has information which conflicts with an existing link.
  1192.  
  1193. For directories whose \atr{directory-ordering} is \lit{UNSORTED},
  1194. one of these three additional options may be specified:
  1195. \begin{description}
  1196. \item[\lit{BEFORE}] The \lit{CREATE-LINK} command is immediately
  1197. followed by a \lit{LINK} line, describing the link before which the
  1198. new link is to be inserted in the directory listing.     
  1199. \item[\lit{AFTER}] Same as above, but the new link is inserted after the
  1200. specified link rather than before it.
  1201. \item[\lit{LAST}]  This is the default.  The new link will be the last
  1202. item in the directory. 
  1203. \end{description}
  1204.  
  1205. \section{DELETE-LINK}
  1206.  
  1207. \begin{command}
  1208.   \commandsize
  1209.   \lit{DELETE-LINK} \meta{options} \meta{name-component} \selectlines
  1210. \end{command}
  1211.  
  1212. This command is used to remove an entry from a directory.  The options
  1213. are currently blank.
  1214.  
  1215. If the \lit{SELECT} lines are not specified and there are multiple
  1216. links with the same \meta{name-component}, the first one matching will
  1217. be deleted.
  1218.  
  1219. \section{EDIT-LINK-INFO}
  1220.  
  1221. \begin{command}
  1222.   \commandsize
  1223.   \lit{EDIT-LINK-INFO}  \meta{modification-request} \meta{name-component}
  1224.     \zoos\lit{ID} \meta{id-type} \meta{id-value}\zooe  
  1225. \end{command}
  1226.  
  1227. \begin{sloppypar}
  1228. This command modifies information associated with a link.
  1229. The interpretation of the %\ \linebreak[3]
  1230. \meta{modification-request} and of
  1231. subsequent lines is exactly the same as in the \lit{EDIT-OBJECT-INFO} command.
  1232. \end{sloppypar}
  1233.  
  1234. %\vspace{-.1in}
  1235.  
  1236. \section{EDIT-ACL}
  1237.  
  1238. \begin{command}
  1239. \commandsize
  1240. \lit{EDIT-ACL}
  1241.  \ors \lit{LINK+}\meta{options} \meta{name-component} \\
  1242.     \hspace{.6in} \metaor \lit{OBJECT+}\meta{options}
  1243.     \meta{hsoname-type} \meta{hsoname} \\
  1244.     \hspace{.6in} \metaor \lit{DIRECTORY+}\meta{options}
  1245. \ore    \\
  1246.     \zoos\lit{ID} \meta{id-type} \meta{id-value}\zooe \meta{LF} \\
  1247.   \lit{ACL} \meta{entry-type} \meta{authentication-type} \meta{rights}
  1248.      \meta{principal}
  1249. \end{command}
  1250.  
  1251. This command is used to modify an access control list for a directory,
  1252. for a link within a directory, or for an object.  If modifying the ACL
  1253. for a directory or for a link within a directory, the directory is
  1254. specified in the previous \lit{DIRECTORY} command.
  1255. Another option indicates the operations to be
  1256. performed (one of \lit{ADD}, \lit{SUBTRACT}, \lit{INSERT}, \lit{DELETE}, \lit{SET} or \lit{DEFAULT}), and
  1257. whether to override the automatic inclusion of the system
  1258. ACL (\lit{NOSYSTEM}), or limited administer access for the client
  1259. (\lit{NOSELF}).
  1260.  
  1261. The server will return \lit{SUCCESS}, \lit{FAILURE}, or
  1262. \lit{FORWARDED}, as appropriate.
  1263.  
  1264. \section{CREATE-OBJECT}
  1265.  
  1266. \begin{command}
  1267.   \commandsize \ors\lit{CREATE-OBJECT} \lit{PHYSICAL+}\meta{options} 
  1268.         \zoos\meta{hsoname-type} \meta{hsoname}\zooe \\ 
  1269.     \metaor \lit{CREATE-OBJECT} \lit{ADD+}\meta{options}
  1270.         \zoos\meta{hsoname-type} \meta{hsoname}\zooe \\ 
  1271.     \metaor \lit{CREATE-OBJECT} \lit{VIRTUAL+}\meta{options}
  1272.         \meta{name-component}\ore \meta{LF} \\
  1273.     \zoms\lit{ATTRIBUTE}
  1274.     \meta{attribute-specifying-tokens}\meta{LF}\zome \\
  1275.     \zoms\lit{ACL} \meta{ACL-specifying-tokens}\meta{LF}\zome
  1276. \end{command}
  1277.  
  1278. This command will create an object with the specified
  1279. \meta{name-component} and will 
  1280. return the identifier that can be used to open it.   The
  1281. \meta{options} may include any or all of 
  1282. \lit{DIRECTORY}, \lit{FILE}, and \lit{OBJECT}.
  1283. If the \lit{FILE} option is specified, the new file is
  1284. created empty.    If the \lit{DIRECTORY} option is specified, the
  1285. new directory is created empty (i.e., not containing any links.).  
  1286.  
  1287. The object will be created with whatever attributes present that are
  1288. specified in the \lit{ATTRIBUTE} lines.
  1289.  
  1290. If \meta{options} includes \lit{VIRTUAL}, then
  1291. \meta{name-component} is a name relative to the current directory, and a
  1292. link to the new object is added to the current directory.
  1293.  
  1294. If the \lit{ADD} option is specified, then one is adding a base type to
  1295. an already created object.   Exactly one of the \lit{ADD},
  1296. \lit{VIRTUAL}, and \lit{PHYSICAL} options must be specified.
  1297.  
  1298. \begin{sloppypar}
  1299. If the \lit{PHYSICAL} option and a  \meta{hsoname-type}
  1300. \meta{hsoname} pair are specified, then the server will attempt to create an object with that
  1301. \meta{hsoname-type} \meta{handle-pair}.  If the \lit{PHYSICAL} option
  1302. without a following pair is
  1303. specified
  1304. then the server will choose a free \meta{hsoname-type}
  1305. \meta{hsoname} pair.
  1306. \end{sloppypar}
  1307.  
  1308. Upon success, the server will return:
  1309. \begin{command}
  1310. \lit{CREATED} \meta{hsoname-type} \meta{hsoname}
  1311. \end{command}
  1312. It is up to the application to create a link to the new object.  
  1313.  
  1314. \subsection{Specifying Attributes}
  1315.  
  1316. The new object's fields will be set to system defaults, but
  1317. specifying a following series of \lit{ATTRIBUTE} descriptions allows
  1318. the creator of a file to override those defaults, and to specify any
  1319. application-defined attributes.  The form for each \lit{ATTRIBUTE} line is
  1320. the same as that returned by the
  1321. \lit{LIST} command.
  1322.  
  1323. \subsection{ACLs}
  1324.  
  1325. If creating an object with the \lit{VIRTUAL} option, the access
  1326. control list for the new object will initially be a copy of the access control
  1327. list for its containing directory.  If creating an object with the
  1328. \lit{PHYSICAL} option, the access control list for the new object will
  1329. contain the \lit{DEFAULT} ACL and the \lit{SYSTEM} ACL.
  1330. In addition,
  1331. for both options, one or more entries will be automatically added to the ACL
  1332. granting its creator all rights.  The entry authentication type or types
  1333. will be appropriate for whatever the user used to authenticate himself
  1334. or herself.  (Either \lit{AUTHENT} \lit{KERBEROS} or \lit{ASRTHOST} or
  1335. \lit{TRSTHOST}.)
  1336.  
  1337. If the \lit{LPRIV} option is
  1338. specified for a directory, instead of this entry, only those rights needed to 
  1339. allow the creator to set up the directory (list, read, insert, and
  1340. administer) will be added, and (if \lit{VIRTUAL} was specified), only
  1341. if the creator does not already have such rights through the ACL that
  1342. was included from the parent directory.\footnote{If you really want to shoot yourself in the foot, you can
  1343. then call \lit{EDIT-ACL} to remove these few rights.  We will let you
  1344. do this, but we are not making it easy for you.} 
  1345.  
  1346. If \lit{VIRTUAL} was specified, the ACL for the new link will
  1347. by default be empty, which means that the default rights for the
  1348. directory will apply to the link.
  1349.  
  1350. After the ACL entries mentioned above are installed, the ACL
  1351. entries specified as part of the \lit{CREATE-OBJECT} command will
  1352. be added to the front of the list.
  1353.  
  1354. \subsection{Some Error Conditions}
  1355.  
  1356. If the user attempted to set a
  1357. field whose name the server does not recognize, or to set a
  1358. application-defined attribute to a type that the server does not recognize,
  1359. or to set the value of any attribute with a string that the server
  1360. cannot convert into the data type the server expects (e.g., too few
  1361. tokens when setting an attribute of type \lit{LINK}), or to set an
  1362. unrecognized ACL type,
  1363. the response is:
  1364. \begin{command}
  1365. \lit{ERROR} \text{explanatory text}
  1366. \end{command}
  1367. If the user specified an explicit \meta{hsoname-type} and
  1368. \meta{hsoname} with the \lit{PHYSICAL} option, but they were
  1369. already in use, or if the user specified a component with
  1370. \lit{VIRTUAL}, but the component is already in use, the error message is:
  1371. \begin{command}
  1372. \lit{FAILURE} \lit{NAME-CONFLICT} \zoos\text{explanatory text}\zooe
  1373. \end{command}
  1374.  
  1375.  
  1376. \subsection{No \protect\lit{DELETE-OBJECT} command}
  1377.  
  1378. Although there is a \lit{DELETE-LINK} command, there is {\em no \/}
  1379. \lit{DELETE-OBJECT} command.  That's because Prospero objects will have
  1380. their storage reclaimed when their TTL expires (when no link to them
  1381. is refreshed before their expiration date).  At the moment, this
  1382. storage reclamation feature is not implemented.)  \footnote{XXX: This
  1383. feature must be specified.  In addition, we must specify methods for
  1384. refreshing links, garbage collection, and notification of the
  1385. impending demise of objects.}
  1386.  
  1387. \section{UPDATE}
  1388.  
  1389. \begin{command}
  1390.   \commandsize
  1391.   \lit{UPDATE} \meta{options} \lit{COMPONENTS} \zoms\meta{name-component}\zome
  1392. \end{command}
  1393.  
  1394. This command tells the server to check each of the named components in
  1395. the current directory for forwarding pointers.  If the referenced
  1396. object has moved, the link will be updated.  The server will send
  1397. Prospero protocol messages across the network to the targets of links
  1398. to Prospero objects in order to check whether the target of a link has
  1399. moved.   (External links and symbolic links will not be checked.)  If
  1400. no components were specified, all components in the
  1401. directory will be checked.  Each \meta{name-component} may contain
  1402. wild cards.
  1403.  
  1404. On success, the \lit{UPDATE} command returns the
  1405. number of links that were modified.
  1406.  
  1407. \begin{command}
  1408.   \lit{UPDATED} \meta{number} \lit{LINKS}
  1409. \end{command}
  1410.  
  1411. On failure, the \lit{UPDATE} command returns the number of links it
  1412. was unable to update.\footnote{
  1413.     This error message may change in response to future needs.}
  1414.  
  1415. \begin{command}
  1416.   \lit{FAILED TO UPDATE} \meta{number} \lit{LINKS}
  1417. \end{command}
  1418. Wildcards 
  1419.  
  1420. \section{STATUS}
  1421.  
  1422. This command requests the current status of the server.  A humanly
  1423. readable multiple line response is returned.  The response may be
  1424. presented to the user without additional processing.  The response
  1425. must conform to the following requirements so that it may be read by a
  1426. program if desired.
  1427.  
  1428. The first line must include the server's software version
  1429. identification enclosed in parenthesis, and the host name of the
  1430. server.  The name of the host should be the name that appears on local
  1431. links generated by the server; it might not be the primary name of the
  1432. host.  The version identifier must be the first string that appears in
  1433. parenthesis, and the host name must be the string that immediately
  1434. follows the version identifier.
  1435.  
  1436. If a line contains a colon (:), the string preceding the colon
  1437. identifies the meaning of the text that follows the colon.  Reserved
  1438. identifiers include \lit{Contact}, \lit{Started}, \lit{Memory},
  1439. \lit{Data}, \lit{Root}, \lit{AFTP}, \lit{AFS}, and \lit{DB}.  The
  1440. identifiers are case insensitive.  If present, \lit{AFTP} 
  1441. identifies the part of the file system accessible by anonymous \lit{FTP}.
  1442.  
  1443. More than one \lit{DB} line may be present.  A \lit{DB} line may
  1444. contain more than 
  1445. one item on it; if it does, the items must be separated by spaces.
  1446. Each item on a \lit{DB} line is an initial prefix which this particular
  1447. server recognizes to mean that, if this server receives a system-level
  1448. name with this prefix followed by a slash, the remaining contents of
  1449. the line are fed to a database program which translates it into a
  1450. reference to a virtual directory.  
  1451.  
  1452. Other than for the first line of the response, implementations are
  1453. free to add or modify lines that do not contain a colons.  A sample
  1454. status response follows:
  1455.  
  1456. \begin{verbatim}
  1457.        Prospero server (Beta.4.2B) JUNE.CS.WASHINGTON.EDU
  1458.        Requests since startup 4096 (3609+377+2 67+29+0 9 0+0+0 0 3) OF
  1459.        Started: 26-Aug-91 15:14:56 UTC
  1460.        Contact: bcn@cs.washington.edu
  1461.         Memory: 0(118)vl 0(4)at 0(5)acl 0(1)fi 1(1)pr 2(2)pt 0(711)str
  1462.           Data: /u1/vfs/pfsdat
  1463.           Root: /
  1464.             DB: ARCHIE GOPHER(70) GOPHERGW WAIS
  1465.           AFTP: /homes/june/ftp
  1466. \end{verbatim}
  1467.  
  1468. Since the responses to this command are so free in form, it is
  1469. unlikely you would want to send additional requests to the Prospero
  1470. server along with the \lit{STATUS} request, since it would not be easy for a
  1471. program to separate the replies to them from the free-form text.
  1472.  
  1473. \chapter{Standard Responses}
  1474.  
  1475. \section{SUCCESS}
  1476.  
  1477. \begin{command}
  1478. \commandsize
  1479.  \protect\lit{SUCCESS} \zoos\protect\text{identifying-info}\zooe
  1480. \end{command}
  1481.  
  1482. A command that does not generate any output returns this response if
  1483. successful.
  1484.  
  1485. \section{FORWARDED}
  1486.  
  1487. \begin{command}
  1488. \commandsize
  1489. \protect\lit{FORWARDED} \protect\meta{host-type} \protect\meta{host-name}
  1490.     \protect\meta{hsoname-type} \protect\meta{hsoname}
  1491.     \protect\meta{version}      [ \lit{DEST-EXP} \meta{dest-expiration} ] \\
  1492.     \protect\zoms \protect\lit{ID} \protect\meta{id-type} \protect\meta{id-value}\protect\zome
  1493. \end{command}
  1494.  
  1495. This response is returned when the object that is the target of an
  1496. operation has moved.  The client can retry the response using the
  1497. corrected information.
  1498.  
  1499. \section{ERROR}
  1500.  
  1501. \begin{command}
  1502. \commandsize
  1503. \protect\lit{ERROR} \protect\text{text}
  1504. \end{command}
  1505.  
  1506. This response is returned to indicate an error encountered when
  1507. parsing the request.  The error might be a protocol error, or it might
  1508. be the result of the server's inability to recognize a keyword or data
  1509. type. \text{text} describes the error.
  1510.  
  1511. \section{FAILURE}
  1512.  
  1513. \begin{command}
  1514. \commandsize
  1515. \protect\lit{FAILURE} \protect\meta{identifying-info}
  1516.     \zoos\protect\text{optional text} \zooe
  1517. \end{command}
  1518.  
  1519. This response is returned when an operation can not be performed.  The
  1520. defined values for \meta{identifying-info} appear below.
  1521. If present, the \text{optional text} provides additional information
  1522. about the failure.
  1523.  
  1524. \begin{command}
  1525.   \lit{NOT-FOUND} \ors\lit{FILE} \metaor \lit{ACL} \metaor
  1526.     \lit{OBJECT} \metaor \lit{FILTER} \metaor \lit{PARAMETER} \metaor
  1527.     \lit{ATTRIBUTE} \ore \\
  1528.   \lit{ALREADY-EXISTS} \\
  1529.   \lit{NAME-CONFLICT} \\
  1530.   \lit{AUTHENTICATION-REQUIRED} \\
  1531.   \lit{NOT-A-DIRECTORY} \\
  1532.   \lit{NOT-AUTHORIZED} \\
  1533.   \lit{AUTHENTICATION-DATA} \\
  1534.   \lit{SERVER-FAILED}\footnote{This is used in the following
  1535.     situations, among others: if
  1536.     an internal table in the server fills up, or if the server cannot
  1537.     allocate enough memory to handle the request, or if the server detects
  1538.     an internal inconsistency in its database, or if the server
  1539. has not implemented a command specified in the protocol.}\\
  1540.   \lit{AMBIGUOUS} \\
  1541.   \lit{BAD-VALUE} \\
  1542.   \lit{FILTER-APPLICATION} \\
  1543. \end{command}
  1544.  
  1545. \section{WARNING}
  1546.  
  1547. \begin{command}
  1548. \commandsize
  1549. \protect\lit{WARNING} \protect\meta{identifying-info}
  1550.     \zoos\protect\text{optional text}\zooe
  1551. \end{command}
  1552.  
  1553. This response is returned to indicate a warning condition which does
  1554. not affect the correctness of the response.  This message can be used
  1555. to indicate that the client is using an old version of the protocol
  1556. that, while supported, should be phased out.  It can also be used to
  1557. inform the client of future changes on the server or scheduled
  1558. downtime.  The defined values for \meta{identifying-info} appear
  1559. below.  \text{optional text} is optional text that provides additional
  1560. information about the warning.
  1561.  
  1562. \begin{command}
  1563.   \lit{OUT-OF-DATE} \\
  1564.   \lit{MESSAGE} \\
  1565.   {\em Any \meta{identifying-info} that can follow a \lit{FAILURE} message}
  1566. \end{command}
  1567. Prospero clients are strongly encouraged to present warnings to the user.
  1568.  
  1569.  
  1570. \appendix
  1571.  
  1572. \chapter{Directory, Link, and Object Attributes\label{db}}
  1573.  
  1574. This appendix describes the object and directory information
  1575. maintained by the Prospero file system.
  1576.  
  1577. {\bf \large Please note that this appendix is in very rough
  1578. form.  Many of the attribute definitions have not yet been properly
  1579. written.  A lot of the attribute documentation can be found in
  1580. section~\ref{Link Attributes} of this document.}
  1581.  
  1582. Attributes have three namespaces
  1583. associated with them: \lit{APPLICATION} attributes, \lit{INTRINSIC}
  1584. attributes, and \lit{FIELD}s.
  1585. Attributes in the \lit{FIELD} namespace have a registered meaning, and
  1586. are understood by all clients and servers that use them.
  1587. \lit{APPICATION} attributes are defined by users and application
  1588. programs and are unrestricted.  Intrinsic attributes have special
  1589. registered meanings, providing prossibly transient or derived
  1590. information.  The server has flexibility about whether it allows you
  1591. to change these things.  Modifying them may have special implications
  1592. --- for instance, setting the \atr{SIZE} of a file to 
  1593. ``\lit{0 bytes}'' will truncate the file.  \lit{INTRINSIC} attributes
  1594. gare either not modifiable, or else the server uses special mechanisms
  1595. to modify them.
  1596.  
  1597. In addition, there is a fourth namespace used internally by routines
  1598. running on the Prospero server.   \lit{INTERNAL} attributes are never
  1599. sent across the network; they cannot be read with GET-OBJECT-INFO or
  1600. LIST and cannot be modified with EDIT-OBJECT-INFO.  However, they do
  1601. appear in the server's data files.
  1602.  
  1603. \section{Objects}
  1604.  
  1605. \subsection{Attributes\label{access-method}}
  1606.  
  1607. Valid attributes include {\sc access-method,
  1608. closure, description, forwarding-pointer, keywords, last-referenced,
  1609. last-writer, locks, owner, replicas, size, storage-location, ttl,
  1610. ttl-expires.  version-number, virt-sys, well-known-names,} and {\sc
  1611. write-date}.
  1612.  
  1613. Prospero maintains the following system defined attributes for each
  1614. Prospero object:
  1615.  
  1616. \begin{description}
  1617. \item[\atr{base-type}] See section~\ref{base type} for a description of
  1618. this attribute.
  1619.  
  1620. \footnotetext{
  1621.   {\bf RATIONALE}: Under the version 1 protocol, the means of obtaining the
  1622.   access method information for \lit{EXTERNAL} and \lit{FILE} links was
  1623.   different; this made the code more complicated than it needed to be.
  1624.  
  1625.   The reader may well ask why the host should be specified in
  1626.   the value of the \atr{access-method} field.  Isn't the host name
  1627.   already specified in the \atr{host} field?    Including the host
  1628.   name as part of the attribute's value has some advantages:
  1629.   \begin{itemize}
  1630.   \item The value of the \atr{access-method} field is all one needs in
  1631.   order to retrieve the file.  
  1632.  
  1633.  
  1634.   \item One might have a Prospero server running on only one host in a
  1635.   cluster, where the objects themselves are actually stored on another
  1636.   fileserver.  Then, one would want to be able to have the
  1637.   \atr{access-method} host be different from the host which is listed
  1638.   as the one having the final word on the status of the object.
  1639.  
  1640.   \item This system also allows us to have a gateway server, which is able to
  1641.   translate directory formats from other distributed file systems (e.g.,
  1642.   gopher), but directs the client to retrieve the files themselves from
  1643.   a host that is not the gateway server.
  1644.  
  1645.   \end{itemize}
  1646. }
  1647.  
  1648. \item[\atr{access-method}\footnotemark]
  1649.  
  1650. This is a tuple of at least 5 elements.  The first element is the name
  1651. of the access method.  Currently supported values are \lit{AFTP}, \lit{GOPHER},
  1652. \lit{AFS}, \lit{NFS}, \lit{FTP}, \lit{WAIS}, and \lit{LOCAL}. 
  1653. The next 2 elements are the \meta{host-type} and \meta{host-name} of
  1654. the host to which the access method should connect in order to
  1655. retrieve the object.  A port number may be included as part of the
  1656.  hostname, if relevant.   If they are zero-length tokens (\lit{'{}'}), then
  1657. they default to the \meta{host-type} and \meta{host-name} specified in
  1658. the link.  The next 2 elements are the \meta{hsoname-type} and
  1659. \meta{hsoname} which the access method will use to retrieve the
  1660. object.  If they are zero-length tokens, then they default to the
  1661. \meta{hsoname-type} and \meta{hsoname} specified in the link.
  1662. This constraint on format applies to all access methods.  If a
  1663. particular type of access method doesn't need one of these fields,
  1664. then it still must be specified, but the access method is free to ignore it.  The whole
  1665. point of the \lit{'{}'} shorthand is merely to save bytes in the
  1666. protocol messages.  It is always appropriate to send them fully
  1667. expanded, and not use the \lit{'{}'} shorthand.
  1668.  
  1669. The sixth and subsequent elements are dependent upon the particular
  1670. access method.  For \lit{AFTP} and \lit{FTP}, the sixth element will be
  1671. \lit{BINARY} or \lit{TEXT}.  For \lit{NFS}, the sixth
  1672. element will be the name of the filesystem on the remote host.
  1673. \lit{LOCAL}, and \lit{AFS} have only five-element names.
  1674.  
  1675. The \lit{GOPHER} access method may have five or six elements in the
  1676. name.  The actual protocol used to retrieve a document or object
  1677. through Gopher varies depending on its Gopher item-type.  (See
  1678. Internet RFC 1436 for details on the interpretation of the Gopher
  1679. item-type characters.).  This item type is usually the 1st character
  1680. of a Gopher document or object's selector string (the \meta{hsoname}
  1681. element of the access method).  However, the protocol does not require
  1682. that this be the case.  If a sixth token is present in a \lit{GOPHER}
  1683. access method, it will be treated as the Gopher item-type character;
  1684. otherwise, the item-type will be taken from the 1st character of the
  1685. \meta{hsoname} element.
  1686.  
  1687.  
  1688.  
  1689. Some examples: 
  1690.  
  1691. \begin{command}
  1692. \tt \sloppy ATTRIBUTE FIELD ACCESS-METHOD GOPHER 
  1693. %\linebreak[2]
  1694. INTERNET-D~MERMAID.MICRO.UMN.EDU(150)
  1695. ASCII~\mbox{'1/Fun Stuff/Pyrotechnics/PyroGuide\ 1'}%
  1696. \footnote{This file recently
  1697.     disappeared from the server.  If you have a copy, please send it to
  1698.     \verb"swa@isi.edu".} 
  1699.  
  1700. {\rm \par This access method could also be displayed in the six-token
  1701. format as:}
  1702.  
  1703. \tt \sloppy ATTRIBUTE FIELD ACCESS-METHOD GOPHER 
  1704. %\linebreak[2]
  1705. INTERNET-D~MERMAID.MICRO.UMN.EDU(150)
  1706. ASCII~\mbox{'1/Fun Stuff/Pyrotechnics/PyroGuide\ 1'}~1%
  1707. \footnote{This file recently
  1708.     disappeared from the server.  If you have a copy, please send it to
  1709.     \verb"swa@isi.edu".} 
  1710.  
  1711. {\rm \par Andrew File System names are the same irrespective of what host
  1712. one is using them from.  Therefore, the \meta{host-name} token in the
  1713. access method is irrelevant and is ignored by the client.}
  1714.  
  1715. ATTRIBUTE FIELD ACCESS-METHOD AFS DUMMY DUMMY
  1716. ASCII~\mbox{/grand.central.org/doc/afs/dce/usenix90/README}
  1717.  
  1718. {\rm \par This file can be retrieved by NFS mounting the {\tt /auto/gum/gum}
  1719. filesystem on the host PROSPERO.ISI.EDU.  Note that the server is
  1720. responsible for knowing which client machines it will allow to NFS
  1721. mount that filesystem.}
  1722.  
  1723. ATTRIBUTE FIELD ACCESS-METHOD NFS INTERNET-D~PROSPERO.ISI.EDU
  1724.     ASCII~\mbox{ftp/pub/prospero/README-prospero-documents}
  1725.      \mbox{/auto/gum/gum}
  1726.  
  1727. {\rm \par \meta{hsoname} tokens in the \lit{FTP} access method are full
  1728. local hostname paths that one would give when using full FTP to the host.}
  1729.  
  1730. ATTRIBUTE FIELD ACCESS-METHOD FTP INTERNET-D~PROSPERO.ISI.EDU
  1731.     ASCII~\mbox{/ftp/pub/prospero/README-prospero-documents} TEXT
  1732.  
  1733. {\rm \par \meta{hsoname} tokens in the \lit{AFTP} access method are
  1734. pathnames relative to the root of the anonymous FTP area.}
  1735.  
  1736. ATTRIBUTE FIELD ACCESS-METHOD AFTP INTERNET-D~PROSPERO.ISI.EDU
  1737.     ASCII~\mbox{/pub/prospero/README-prospero-documents} TEXT 
  1738.  
  1739. {\rm If one is querying from a host which has a file accessible via
  1740. the local filesystem, and if the server has knowledge of this fact, a
  1741. \lit{LOCAL} access method will also be returned for a file.  For the
  1742. \lit{LOCAL} access method, the \meta{host-name} token in the access
  1743. method is ignored.}
  1744.  
  1745. ATTRIBUTE FIELD ACCESS-METHOD LOCAL '' ''
  1746.     ASCII~\mbox{/auto/gum/gum/ftp/pub/prospero/README-prospero-documents}
  1747.  
  1748. \end{command}
  1749.  
  1750.  
  1751. \item[\atr{closure}]  The \meta{attribute-type} of thie attribute is
  1752. \lit{LINK}.  It is a link to the virtual system to be
  1753. used when resolving names embedded in the object.  The link's
  1754. \meta{name-component} will be ignored, but by convention it is the
  1755. ugly-name of the virtual system.
  1756.  
  1757. \item[\atr{owning-virtual-system}]  The \meta{attribute-type} of this
  1758. attribute is \lit{LINK}.  It is a link to the description of the
  1759. virtual system which is considered to own the object.  (Every virtual
  1760. system, by convention, has a link to its description named
  1761. \lit{/VS-DESCRIPTION}.   For directories, if you are logged into
  1762. the directory's \atr{owning-virtual-system}, then if you try to change
  1763. the directory, your client will assume that you really want to try to
  1764. change the directory.  If you are logged into a different virtual
  1765. system from the directory's \atr{owning-virtual-system}, then if you
  1766. try to change the directory, your client will assume that you really
  1767. want to customize your own virtual system, but not affect the master
  1768. directory.  Your intentions are completely distinct from whether you
  1769. actually have write permission on the directory.  If you try to change
  1770. a directory that you can't write to (if its \atr{owning-virtual-system} is
  1771. the same as the virtual system you're logged into, but you don't have
  1772. permission to write to it), then the current clients will all give you
  1773. a ``permission denied'' error message, and the nice ones will suggest
  1774. that you might want to change virtual systems and customize instead.
  1775. The link's \meta{name-component} will be ignored, but by convention it is the
  1776. ugly-name of the virtual system.
  1777.  
  1778. \item[\atr{version-number}] The \meta{attribute-type} of this
  1779. attribute is \lit{SEQUENCE}.  It is represented in the protocol as a
  1780. decimal number.  It is currently always zero; see section~\ref{object
  1781. version numbers} for further details.
  1782.  
  1783. \item[\atr{owner}] The principal responsible for the object.  The
  1784. \meta{attribute-type} of this attribute is \lit{SEQUENCE}.  It is a tuple
  1785. of three or more elements.  The first element is an ACL
  1786. \meta{entry-type} and the second element is an ACL
  1787. \meta{authentication-type}.  The third and subsequent elements are
  1788. \meta{principal-name}s.  The first two elements are needed because
  1789. they indicate the namespace in which the \meta{principal-name}s are to
  1790. be resolved.  There may be multiple instances of the \atr{owner}
  1791. field, if the owner wants to be registered according to several
  1792. authentication systems.  For instance, one of the authors of this
  1793. document uses an \atr{owner} field that looks like this:
  1794. \begin{command}
  1795. \lit{ATTRIBUTE FIELD OWNER ASRTHOST '' swa@128.9.*.*} \\
  1796. \lit{ATTRIBUTE FIELD OWNER AUTHENT KERBEROS swa@ISI.EDU swa/padmin@ISI.EDU} \\
  1797. \end{command}
  1798. Although the \atr{owner} field may be referred to with the \lit{OWNER}
  1799. ACL type, we don't really encourage people to use it as a shorthand
  1800. for granting access rights.  Its primary purpose is informational.
  1801.  
  1802. \item[\atr{forwarding-pointer}]  This attribute has type \lit{LINK}.
  1803. The link's \meta{target} is \lit{FP}.   It is set for objects that
  1804. have migrated to another host.  The target of its value is the new
  1805. location of the object.  If an object has moved to a new host,
  1806. its \atr{forwarding-pointer} will be returned in a \lit{FORWARD}
  1807. protocol message in response to any attempts to access it.
  1808.  
  1809. \item[Last writer, write date, etc.] 
  1810.  
  1811. \item[Version info] (optional).  Number of versions to keep,
  1812. version number, etc. 
  1813.  
  1814. \item[Attributes or keywords] (optional).  User specified.
  1815.  
  1816. \item[Short description] (optional). 
  1817.  
  1818. \item[Locks] (optional).
  1819.  
  1820. \item[List of replicas] (optional).  
  1821.  
  1822. \item[Replication type] (optional).  
  1823.  
  1824. \item[Other replication information] (optional).  
  1825.  
  1826. \item[Time to live].  The lifetime for newly created or refreshed
  1827. links to the object.  
  1828.  
  1829. \item[\atr{ttl-expires}]  This is the \atr{ttl} plus the
  1830. time that a link to the object was last created or refreshed.
  1831.  
  1832. \item[Back links].  A possibly incomplete list of directories
  1833. with links to the object.
  1834. \end{description}
  1835.  
  1836. Note that the object's name is not one of its attributes.  The
  1837. object's name is the concatenation of the name components starting from the
  1838. active virtual system.  An object may have different names in
  1839. different virtual systems, or even multiple names within a single
  1840. virtual system\footnote{Despite this, well known names from agreed
  1841. upon starting points might be entered as application-defined attributes for
  1842. objects.}.
  1843.  
  1844. \subsection{Objects stored on \unix}
  1845.  
  1846. Objects stored on \unix\ servers have the following attributes defined
  1847. for them.  These are all \lit{INTRINSIC}:
  1848.  
  1849. \begin{description}
  1850.  
  1851. \item[\atr{size}] A single-element \lit{SEQUENCE} specifying the
  1852. number of bytes used to store the object.  Its format is
  1853. ``\meta{number} \lit{bytes}''.  Note the embedded space.
  1854.  
  1855. \item[\atr{native-owner}]  A single-element \lit{SEQUENCE}.  The
  1856. \unix\ username on the server of the user who owns this file.
  1857.  
  1858. \item[\atr{native-owner}]  A single-element \lit{SEQUENCE}.  The
  1859. \unix\ group name on the server of the group associated with this
  1860. file.
  1861.  
  1862. \item[\atr{last-modified}] A single-element \lit{SEQUENCE}.  The
  1863. ASN-TIME representation of the last modified time of this object.
  1864.  
  1865. \item[\atr{unix-modes}] A single element \lit{SEQUENCE} consisting of
  1866. a ten character string.  The first character is ``\lit{l}'' for
  1867. symbolic links, and ``\lit{-}'' otherwise.  The remaining 9 characters
  1868. are the user, group, and other protection bits in the standard format
  1869. returned by ``\lit{ls -l}''.
  1870.  
  1871. \end{description}
  1872.  
  1873. \subsection{Persistence}
  1874.  
  1875. An object continues to exist until the last non-expired link
  1876. referencing the object is removed.  If a user wishes to recover the
  1877. storage space for an object, it is flagged for removal.  When links to
  1878. the object are refreshed, notification is sent that the object is
  1879. about to disappear, and anyone wanting to maintain their reference
  1880. must copy the object elsewhere.  Subsequent users have the option of
  1881. making their own copy, or updating their link to refer to one of the
  1882. new copies.
  1883.  
  1884. \subsection{Mobility}
  1885.  
  1886. Objects may move from one site to another.  If they do, a forwarding
  1887. pointer must remain at the old location until the time-to-live
  1888. expires.  This enables anyone with a non-expired link to the object to
  1889. refresh the link and record the object's new location.\footnote{To
  1890. place a forwarding pointer, set the old object's
  1891. \atr{FORWARDING-POINTER} atribute.  It must be manually moved to the
  1892. new server at this time.}
  1893.  
  1894. \section{Directories}
  1895.  
  1896. A directory is an object and as such, everything that applies to
  1897. objects also applies to directories.  The physical representation of
  1898. a directory is interpreted by the Prospero server on the system
  1899. storing the directory.  The Prospero protocol defines the interface
  1900. through which a directory is accessed.
  1901.  
  1902. \subsection{Directory Attributes}
  1903.  
  1904. The following attributes are defined for directories:
  1905.  
  1906. \begin{description}
  1907. \item[\atr{directory-ordering} (not yet implemented)]  This attribute
  1908. is a 3-tuple.  The 
  1909. default value is 
  1910. \begin{command}
  1911. \lit{SORTED NAME-COMPONENT INCREASING}
  1912. \end{command}
  1913. which means that, by default, directory entries are sorted in increasing
  1914. order according to the value of their \atr{name-component}
  1915. attribute.
  1916.  
  1917. The first element of the tuple is \lit{SORTED} or \lit{UNSORTED}.  If
  1918. \lit{UNSORTED}, the next two elements must be null.  If \lit{SORTED},
  1919. the second field specifies an attribute which is the sort key.  The
  1920. third element is either \lit{INCREASING} or \lit{DECREASING}, meaning
  1921. the order of sorting.%
  1922. \footnote{In the current implmentation, the only sort keys
  1923. that may be specified must have an \meta{attribute-type} of
  1924. \lit{ASCII}.}
  1925.  
  1926. If the \atr{include-native} attribute is set to any value other than
  1927. \lit{NONATIVE}, then the \atr{directory-ordering} cannot be
  1928. \lit{UNSORTED}.
  1929.  
  1930.  
  1931.  
  1932. \item[\atr{include-native} (not yet implemented)] Whether to include
  1933. information from the native filesystem in the directory.  If files are
  1934. included, they will be included from the real directory on the server
  1935. with the same \meta{hsoname} as the Prospero directory.  Its
  1936. \meta{attribute-type} is a single-element \lit{SEQUENCE}.  
  1937. Values are:
  1938. \begin{description}
  1939. \item[\lit{NONATIVE}] Do not include files from native directory.
  1940. \item[\lit{INCLNATIVE}]  Include all files from native directory.
  1941. \item[\lit{INCLREAL}]    Smae as above, but (for the \unix\  server) do not
  1942. include ``\lit{.}'' and ``\lit{..}''.
  1943. \item[\lit{NATIVEONLY}] All entries in directory are from native dir;
  1944.     no links have been added.  For the \unix\  server, ``\lit{.}'' and
  1945. ``\lit{..}'' are NOT included. 
  1946. \item[\lit{PSEUDO}] Directory is not real.  This is set for all
  1947. directories returned from filters and by Archie and Gopher.
  1948. \end{description}
  1949.  
  1950. \end{description}
  1951.  
  1952. \subsection{Link Attributes\label{target-attribute}}
  1953.  
  1954. Prospero directories contain links to the objects that are included in
  1955. the directory. The following information is maintained for each link.
  1956.  
  1957. \begin{description}
  1958.  
  1959. \item[\atr{name-component}] This is the single component of the
  1960. object's path relative to the current directory.  Its
  1961. \meta{attribute-type} is \lit{SEQUENCE}.
  1962.  
  1963. \item[Short description of link] (Optional).
  1964.  
  1965. \item[\atr{link-type}].  The type of a link can be either 
  1966. normal [L] or union [U].  In the case of a normal link, an entry for
  1967. the link is visible when the directory is listed.  In the case of a
  1968. union link, which can only be made to another directory, the links
  1969. from the target directory appear as part of the directory from which
  1970. the union link originates when the originating directory is listed.
  1971. If multiple objects have the same name, the order in which the union
  1972. links appear determines which object is visible.
  1973.  
  1974. Two types of links which may appear locally (either in the server, or
  1975. on the client) are [-] deleted, and [N] native.  It is not legal for
  1976. these codes to be sent across the network.  Type [N] links are
  1977. converted to [L] and type [-] are skipped entirely.
  1978.  
  1979. \item[\atr{target}]  Target of link:  For links in a directory that
  1980. don't point to objects, could be \lit{SYMBOLIC} or \lit{EXTERNAL}. For a
  1981. forwarding pointer it is \lit{FP}.  Links to objects will have a target
  1982. field indicating the cached value of the object's \atr{BASE-TYPE}
  1983. attribute.  When stored on a vlink structure, it may have exactly one
  1984. of the following forms: \lit{OBJECT}, \lit{FILE}, \lit{DIRECTORY},
  1985. \lit{DIRECTORY+FILE}.  There is no guarantee that the type of the target
  1986. has not changed.  Thus, this field is the cached value of the object's
  1987. base type.  For union links, this field is always \lit{DIRECTORY} or
  1988. \lit{DIRECTORY+FILE}.  See section~\ref{target-token} for a further
  1989. discussion of this.
  1990.  
  1991.  
  1992. \item[Hidden/Not-Hidden/Externally-Hidden\footnote{Not yet implemented}]
  1993. By default, a hidden 
  1994. link is not displayed when a directory is listed.  It is, however,
  1995. returned by the directory server, and is traversed if the actual name
  1996. is specified in a pathname.  An Externally-Hidden link is a hidden
  1997. link that will be displayed if the current virtual system is the same
  1998. as the owning virtual system for the directory containing the link.
  1999. The user may override the hidden option, causing hidden links to be
  2000. listed. Note that it is also possible to hide a link by
  2001. specifying its protection as non-listable.  Such links will {\bf only}
  2002. be returned by the directory server when the actual name of the link
  2003. has been specified.
  2004.  
  2005. \item[\atr{filter}] Multiple filters
  2006. allowed.  The filter attribute is a pointer to a program that can be
  2007. used to filter the contents of directories to which links are made.
  2008. {\it data} is the set of optional arguments passed to the filter
  2009. program.  In addition to the linked directory and arguments, the
  2010. filter has access to all other information available from the current
  2011. directory.
  2012.  
  2013. Filters come in several types.  By default, a filter is a directory
  2014. filter, and is applied when searching directories.  A hierarchy filter
  2015. is similar to a directory filter.  The difference is that a directory
  2016. filter is applied to a single directory, while a hierarchy filter is
  2017. applied to the entire hierarchy (including subdirectories) reached
  2018. through a link.  Directory and hierarchy filters come in two types.
  2019. The default is post-expansion.  The filter is applied after all union
  2020. links have been expanded.  A pre-expansion filter is applied before
  2021. union links are expanded.  An object filter is applied when accessing
  2022. an object other than a directory, and might be used, for example, to
  2023. cause some operation to be performed on the object before it is
  2024. accessed.  Note, however, that all types of filters are associated
  2025. with links.
  2026.  
  2027. Filters are applied to a directory in the order of pre-or post
  2028. expansion, decreasing depth of the links to which they are attached
  2029. (for hierarchy filters), and finally in the order that the filters are
  2030. specified on the traversed links.
  2031.  
  2032. \item {\bf Attributes} (optional).  Application attributes to be
  2033. associated with the link.  This allows a user or application to add
  2034. (or override) attributes to the linked object (which might be owned by
  2035. someone else, and thus not modifiable).
  2036.  
  2037. \item[\atr{host}] The name of the host on which the
  2038. object can be found. 
  2039.  
  2040. \item[\atr{host-type}]  The type of
  2041. the hostname.  In particular, whether the hostname is an Internet
  2042. address, a domain style name, or a name in some other naming system.
  2043.  
  2044. Note that a symbolic link is a link where the destination host is a
  2045. virtual system, and the destination object name is a name relative to
  2046. that virtual system.
  2047.  
  2048. \item[\atr{hsoname}] Host-specific object name. The name of the object
  2049. relative to the destination system.  
  2050.  
  2051. \item[\atr{hsoname-type}] The
  2052. type of \atr{hsoname}. Different types of names include numerical file IDs,
  2053. names relative to the root of the local file system, etc.  Right now,
  2054. only pathnames are implemented, and their type is \lit{ASCII}.
  2055.  
  2056. \item[\atr{object-version}] By specifying a version number
  2057. in a directory link, the link is made to a specific version of the
  2058. object, and changes to the object will not be visible through the
  2059. link.
  2060.  
  2061. \item {\bf Access control info} (optional). Allows restrictions on who can
  2062. read or modify individual directory entries.  These are really
  2063. attributes, though they are in fact retrieved and modified with LIST-ACL and
  2064. EDIT-ACL, and do not appear on the normal attribute listings.
  2065.  
  2066. \item[\atr{dest-exp}] {\bf Destination expiration date and time}.  Its
  2067. implied type is a single-element {\tt SEQUENCE}, in ASN-TIME format.\footnote{
  2068.     Implementers should use the {\tt asntotime()} function in the
  2069. {\tt pfs} library in order to convert an ASN-TIME string into a
  2070. \unix\  timestamp, and the {\tt timetoasn()} function to perform the
  2071. reverse conversion.  Applications writers are encouraged to use
  2072. ASN-TIME format to represent all timestamps sent across the network.
  2073. }
  2074. This entry indicates how long 
  2075. the information in the link should be considered valid.  When an
  2076. object is accessed through a link, the destination expiration date
  2077. should be set to the current time plus the destination time-to-live.
  2078.  
  2079. Note that expired directory entries do not disappear.  Typically they
  2080. remain valid.  The expiration means that there is no longer a
  2081. guarantee that the object originally referenced can still be found.
  2082.    
  2083. \item {\bf ID}.  When a new object is created, a unique
  2084. object identifier may be assigned.  This identifier can be included in
  2085. links, and used to further verify that the named object is the one
  2086. that is actually desired.  It allows one to reference objects after
  2087. their expiration dates with the guarantee that if these identifiers
  2088. match, it is the same object.  In the prototype, the object identifier
  2089. is a random number of type REMOTE.  Other types of object identifiers
  2090. will be defined after more work is done by an IETF working group.
  2091.  
  2092. \item {\bf Valid-till} (optional).  If a link is a cached value, then
  2093. this field indicates how long the entry should be considered valid.
  2094. For example, a symbolic link may have a corresponding cached hard
  2095. link.  Until its expiration a cache entry may be used instead of
  2096. searching based on the symbolic link.  If this field is 0, then the
  2097. link is not a cached entry.
  2098.  
  2099. \item {\bf Last-update} (optional).  This is the time the link was
  2100. last updated.  Its expected use is for resolving conflicting updates
  2101. in replicated directories.
  2102.  
  2103. \end{description}
  2104.  
  2105. \subsection{Replication}
  2106.  
  2107. When support for replication is added to Prospero, a directory might
  2108. include multiple links with the same name for the same object. Not all
  2109. replicas need be listed, however, because each replica will maintain
  2110. its own list of siblings.  Multiple entries are important to increase
  2111. reliability and availability.
  2112.  
  2113. \chapter{Asynchronous Reliable Delivery Protocol\label{ardp}}
  2114.  
  2115. This appendix describes the asynchronous reliable delivery protocol
  2116. (ARDP) used by Prospero.  As used by Prospero, this protocol is
  2117. layered on top of the Internet User Datagram Protocol. 
  2118. % \cite{udp}.
  2119.  
  2120. Prospero implements its own ARDP because at the time of initial
  2121. development we were unable to find any that were suitable for general
  2122. use.  Most systems that use any sort of reliably delivered message
  2123. protocol implement their own around the specific needs of their
  2124. application.  Like these other systems, early versions of the Prospero
  2125. protocol defined the mechanisms needed for retries and packet
  2126. sequencing.  As these mechanisms were refined, the functionality was
  2127. moved to a separate protocol layer (and is implemented as a separate
  2128. library) to improve modularity, and in hope that this general and
  2129. simple ARDP can be used for other purposes.
  2130.  
  2131. The ARDP protocol is designed for a request/response style of
  2132. interaction, where a client sends a request message to a server in one
  2133. fell swoop and receives a reply message from the server.  The server
  2134. can send the packets composing the reply message slowly, as data
  2135. becomes available, while it is still processing the rest of a reply.
  2136. In the current implementation, each request message sent by a machine
  2137. from a particular port has its own connection id.
  2138.  
  2139. ARDP was designed so that in the common case, the additional overhead
  2140. of guaranteeing reliability is as small as possible.  Unless special
  2141. processing is required, the header is kept small, and unless a packet
  2142. is lost, no additional packets are sent.  If a field is not specified,
  2143. the default value is used in its place.  All fields up to and
  2144. including the last field specified must be filled in, but the header
  2145. may be truncated at any point, after which all remaining fields take
  2146. on their default values.  The ARDP header contains the following
  2147. fields:
  2148.  
  2149. \begin{description}
  2150. \item[Octet 0] Version and header length: High order two bits are ARDP
  2151. version number mod 4 (this is version 0). Low order six bits are the
  2152. header length including octet 0.\footnote{The length of the total
  2153. packet, including data, is available via the UDP layer, as are the
  2154. port and IP address of the sending host.}
  2155.  
  2156. \item[Octets 1--2] Connection ID: Defaults to zero.  It must be
  2157. specified in the response to any request that specified a non-zero
  2158. connection ID.
  2159.  
  2160. \item[Octets 3--4] Packet number: Defaults to 1 if not specified. A specified
  2161. value of 0 indicates an unsequenced control packet which should not
  2162. be passed to the application.   Note that unsequenced control packets
  2163. cannot request acknowledgements, nor is there any way for the sender
  2164. of such a packet to be sure that they have arrived.
  2165.  
  2166. \item[Octets 5--6] Total number of packets in this message:   Defaults
  2167. to 0 if not known, or retains current value if it was provided in any
  2168. earlier messages.  If the packet number was also not specified, then
  2169. it defaults to 1.  A specified value of 0 means use the default.
  2170.  
  2171. \item[Octets 7--8] Received through:   Sequence number through which
  2172. all packets have been received by the sender of this packet.  Defaults
  2173. to current value if specified in previous message. Defaults to 0
  2174. otherwise.  The recipient's count of packets received through is
  2175. normally monotonically increasing; this keeps the count from being set
  2176. backwards in case an out-of-order packet is received.  However, if the
  2177. ``reset received through'' option (option 2) is specified in octet 12, then it
  2178. means reset to 0 (i.e. it forgot or lost the earlier messages).  More
  2179. generally, specifying any explicit value for this field along with the
  2180. ``reset received through'' option resets the peer's count, possibly
  2181. backwards.  The recipient should not set its internal value of this
  2182. field backwards unless the ``reset received through'' option is set.
  2183.  
  2184. \item[Octets 9--10] Wait (expected time till response): Defaults to
  2185. current value. Specified value of 0 means revert to client-specified
  2186. backoff algorithm.  Specifying a non-zero value lets the
  2187.     client know that a request might not be processed for some time and
  2188. that the client should not retry the request until the specified time.
  2189. The client may retry sooner if it believes
  2190. messages are available which have been missed (e.g., gaps in the list
  2191. of received packets).  This is an unsigned
  2192. quantity, measured in seconds, in network octet order (i.e., octet 9 is
  2193. more significant than octet 10).  A specified value of 65,535
  2194. (\(\mbox{FFFF}_{16}\); 
  2195. all bits turned on) means greater than or equal to 65,535 seconds
  2196. until the next packet.  (We do not expect that this value will ever be
  2197. used, but it is defined for the sake of completeness.)   
  2198.  
  2199. \item[Octet 11] Flags: Octet 11 is a bit vector specifying option flags.
  2200. The flags may themselves require additional
  2201. fields specific to the flag.  These fields appear at the end of the
  2202. header in the order they are needed when reading flags from the low
  2203. order bit to the high order bit, followed by any extra fields needed
  2204. by the flag specified by the 12th octet.  
  2205.  
  2206. %%
  2207. %% It does not appear to be possible to start a \lit{MINIPAGE} inside
  2208. %% a \lit{TABULAR} environment.  LaTeX is really awful about not permitting
  2209. %% recursive application of its constructs.  I wish there were
  2210. %% something better out there.  --swa
  2211. %%
  2212. %% & \begin{minipage}
  2213. \end{description}
  2214.  
  2215. %\begin{table}[h]
  2216. \begin{center}
  2217. \begin{tabular}{|l|p{3.5in}|p{2.0in}|}
  2218. \multicolumn{3}{c}{Value of flags for octet 11} \\ \hline
  2219. Bit No. & Meaning & Additional Fields \\ \hline
  2220. 0 (low order) & Additional Address Information Follows & 
  2221.     Variable length (see below)\\ \hline 
  2222. 1       & Priority Follows & 2 octets (see below)\\ \hline
  2223. 2 & A Protocol ID for a higher-level protocol follows & 
  2224.     2 octets (see below) \\ \hline
  2225. 3--5    & Unused & \\ \hline
  2226. 6       & This packet is a sequenced control packet only; it should
  2227. not be returned to the application by the ARDP library. & None \\ \hline
  2228. 7 (high order) & Please Acknowledge this Packet & None \\ \hline
  2229. \end{tabular}
  2230. \end{center}
  2231. %\end{table}
  2232.  
  2233.  
  2234. \begin{description}
  2235. \item[Octet 12] More Options:  Octet 12 specifies exactly one (1)
  2236. of up to 256 other options.  The options may themselves require additional
  2237. fields specific to the options.  (See discussion at Octet 11).  
  2238. \end{description}
  2239.  
  2240. %\begin{table}[h]
  2241. \begin{center}
  2242. \begin{tabular}{|l|p{3.0in}|p{3.0in}|}
  2243. \multicolumn{3}{c}{Value of options for octet 12} \\ \hline
  2244. Value   & Meaning       & Additional Fields \\ \hline
  2245. 0       & No Option Specified & None            \\ \hline
  2246. 1       & Client to server: Cancel Request.  Server to client:
  2247. Connection refused. & None                 \\ \hline
  2248. 2       & Reset peer's received-through count. 
  2249.     & Specified in octets 7--8 \\ \hline
  2250. 3       & Packets received beyond received-through
  2251.       & The rest of the    
  2252. header after additional data for octet 11 flags is an arbitrary
  2253. number of octets.  These are bit-vectors specifying which packets
  2254. beyond the received-through specified in this packet have been
  2255. received by the sender of this packet.  For example, if the
  2256. received-through is set to 43, then we know that packet 44 has not
  2257. been received.  The low order bit of the first octet of the additional
  2258. field will be turned on if packet 45 has been received, and off if it
  2259. has not.  The high-order bit will be turned on if packet 52 has been
  2260. received, and off if it has not.  Similarly, the low-order bit of the
  2261. second octet of additional information will be turned on if packet 53
  2262. h as been received, and so on.  The recipient of this information may
  2263. choose to ignore it and use a simpler resend strategy.  Similarly,
  2264. this information is never required to be sent. \\ \hline
  2265. 4       & Redirect (used by servers): The client should send any
  2266. unacknowledged packets 
  2267. already sent and all subsequent packets in this message to a new
  2268. addresss.  This is designed to be used as a load-shedding device.  In
  2269. one common case, this will be the entire response a server gives to a request,
  2270. and the client will resend the entire request to a new server; in
  2271. the other common case, this will be used in conjunction with option 6
  2272. or 7.
  2273.     & 6 octets.  The first 4 octets are the IP address of the new server,
  2274. in network byte order.  The next 2 octets are the UDP port to which
  2275. the request should be sent, also in network byte order. \\ \hline
  2276. 5       & Redirect and notify (used by servers).  Like option 4, but
  2277. the client's network layer should also notify its caller that all
  2278. subsequent requests intended for the old server should be sent to the
  2279. new server instead.  & Same as option 4. \\ \hline
  2280. 6       & Forwarded: This request was received from a
  2281. client, and the sender is a server forwarding it to the recipient for
  2282. processing.   The recipient should pretend that it received this
  2283. message from the sender indicated by the additional fields, not from
  2284. the real sender of this message.  (If implemented, this request should be accepted only
  2285. from one of a group of trusted hosts.)   This option is intended to be
  2286. used by a central server which distributes requests to several subsidiary
  2287. servers which do the actual work of processing the request, but which
  2288. use the central server as  a contact point.  Presumably, it is cheaper
  2289. for the central server to forward the request to the subsidiary
  2290. servers over a local area network rather than for the client (who may
  2291. be quite far away) to retransmit it.    The central server has done
  2292. the job of notifying the original client (through option 4 or 5) that
  2293. further requests and retransmissions should go to the new server.
  2294.     & 6 octets: The IP address and port of the original sender of
  2295. this message, as in number 4. \\ \hline 
  2296. \end{tabular}
  2297.  
  2298. \begin{tabular}{|l|p{3.0in}|p{3.0in}|}
  2299. \multicolumn{3}{c}{Value of options for octet 12} \\ \hline
  2300. 7       & Forwarded; Please notify: Like option 6, but the receiving
  2301. server should notify the client of the switch (through option 4 or 5).%
  2302. \footnotemark
  2303.     & 6 octets: The IP address and port of the original sender of
  2304. this message, as in number 4. \\ \hline 
  2305. 8-252  & Undefined                     & Undefined \\ \hline
  2306. 253     & Request Queue Status & 1 octet.  If bit 0 (low order) is
  2307. set, the position in the queue is requested.  If bit 1 is set, the
  2308. estimated time until this request will be completed is requested.  The
  2309. recipient may ignore this option.  \\ \hline
  2310. 254     & Response to 253.  & 1 octet of flags, followed by 1 or 2 additional
  2311. fields.  If bit 0 (low order) of the flags is set, the position in the
  2312. queue is returned as a 2 octet network byte order representation of an
  2313. unsigned quantity.  A value of  \hexnum{FFFF} (all bits turned on) means 
  2314. a queue position of \hexnum{FFFF} or further.  (We do not expect this
  2315. value to ever be used, but it is included for the sake of
  2316. completeness.)  If bit 1 of the flags is set, the estimated 
  2317. time until this request will be completed is returned as a  4-octet
  2318. network byte order unsigned value, representing a time in seconds.  A
  2319. value of \hexnum{FFFFFFFF} (all bits turned on) means a time of
  2320. \hexnum{FFFFFFFF} seconds or more.  (We do not expect this to ever be 
  2321. used). \\ \hline
  2322. 255     & Reserved for future expansion & Undefined \\ \hline
  2323. \end{tabular}
  2324. \end{center}
  2325. \footnotetext{You might think that the recipient needs to worry
  2326. about the IP address of the FORWARD message it sends to the original
  2327. client being different from that of the original server (the sender of
  2328. this message).  However, this is not the case.  The existence of
  2329. multi-homed hosts means that the sender of a message cannot assume
  2330. that the IP address of a reply (as recorded in the UDP packet
  2331. encapsulating the response it receives) is the same as the address the
  2332. packet was sent to.  The sender must use the connection ID to match up
  2333. sent messages and received replies.}
  2334. %\end{table}
  2335.  
  2336. \begin{description}
  2337. \item[Octets 13 and above] Fields specific to particular flags and options.
  2338.  
  2339. First, additional data fields  specific to the flags in octet 11
  2340. should be specified. 
  2341.  
  2342. \item[Next Octets] Additional Address Information (if Additional
  2343. Address Information flag specified):  The first octet specifies the
  2344. type of additional address information.  The next octet specifies the
  2345. length of the address information, from 0 to 255 octets.\footnote{The
  2346. entire 255 octets are not available for address information, since they
  2347. are part of the header, and the maximum header length header is
  2348. limited to 64 octets.}
  2349.   Its length
  2350. does not include the two octets that specify type and length.   The following
  2351. octets contain the address information itself, and its format is
  2352. dependent upon the type of address information.  
  2353.  
  2354. \item[Next 2 octets] Priority (if Priority flag specified):
  2355. These octets are a signed integer representing the priority of the
  2356. request.  Not all implementations understand this message, and many
  2357. that do will not honor requests for expedited handling.  Negative
  2358. numbers indicate expedited handling while higher numbers indicate
  2359. greater delays.  A priority of 0 is normal.
  2360.  
  2361. \item[Next 2 octets] Protocol ID (if Protocol ID flag specified):
  2362. These octets identify the interpretation of the data carried in the
  2363. packet.  The default, or an explicitly specified value of 0,  mean
  2364. that it is not specified, but has been agreed upon externally (i.e.
  2365. the applications will know). 
  2366.  
  2367. \item[Next octets] Any data specific to the option set by octet 12
  2368. should be specified.  This is the data specified in the ``additional
  2369. fields'' column of the table ``Value of flags for octet 12.''
  2370.  
  2371. \end{description}
  2372.  
  2373. \chapter{Prospero Conventions\label{conventions}}
  2374.  
  2375. \section{\protect\meta{hsoname}s}
  2376.  
  2377. There are some special \meta{hsoname}s that the current Prospero
  2378. server may recognize, if it has been configured appropriately.  If an
  2379. \meta{hsoname} begins with the string \lit{AFTP/}, it is interpreted
  2380. as a path relative to the anonymous FTP directory on that server.  If
  2381. an \meta{hsoname} begins with the string
  2382. \lit{GOPHER}\zoos\lit{(}\meta{gopher-port-number}\lit{)}\zooe, it is
  2383. interpreted to refer to GOPHER data files on that host .  If an
  2384. \meta{hsoname} begins with the string \lit{GOPHER-GW}, it refers
  2385. to GOPHER data files on another host.  If an \meta{hsoname}
  2386. begins with the string \lit{ARCHIE/}, it represents an Archie database
  2387. query.
  2388.  
  2389.  
  2390. \chapter{Prospero Protocol Changes from Version 1 to Version 5}
  2391.  
  2392. Versions 2, 3, and 4 of the Prospero protocol were not used.  The
  2393. protocol number jumped from version 1 to version 5 to keep the
  2394. software number and version number consistent; the first version of
  2395. the server to implement version 5 protocol had a software version
  2396. number of 5.
  2397.  
  2398. For now, all Prospero servers continue to accept Version 1 of the
  2399. protocol.
  2400.  
  2401. Not all of the protocol changes are listed here.
  2402.  
  2403. In version 1, the \lit{EDIT-LINK-INFO} command was called \lit{MODIFY-LINK}.
  2404. The syntax of the arguments has also been changed.
  2405.  
  2406. The method of specifying attributes to \lit{LIST} has changed.  The
  2407. lines returned from \lit{LIST} are also in a new format.
  2408.  
  2409. The quoting mechanism has been formalized, and extended to apply to
  2410. multiple-component directory names.  Therefore, the \lit{ONECOMP}
  2411. option to \lit{LIST} is now officially dead (it was never implemented
  2412. in any server anyway).  Note that no Version 1 server ever implemented
  2413. quoting properly anyway.  Therefore, if a client speaks Version 1
  2414. Protocol, it will not be able to access filenames with spaces in them.
  2415.  
  2416.  
  2417. The \meta{magic-no} field has been replaced with zero or more
  2418. occurrences of the sequence \lit{ID} \meta{id-type} \meta{id-value}.
  2419. \lit{GET-OBJECT-INFO} used to have the reserved keyword \lit{ID}, but
  2420. this has been flushed.
  2421.  
  2422. The syntax of the arguments of
  2423. \lit{EDIT-OBJECT-INFO} has been changed, in order to avoid a syntactic
  2424. amgiguity.   
  2425.  
  2426. Many changes have occurred to the arguments of commands.  
  2427.  
  2428. Filter syntax has changed drastically.  
  2429.  
  2430. Separate principals are now sent as separate protocol tokens in ACL
  2431. and attribute definitions.
  2432.  
  2433. The \atr{target} field used to have a possible value of
  2434. \lit{SYM-LINK}.  This has been changed to \lit{SYMBOLIC}.  The
  2435. \atr{base-type} field has been introduced.
  2436.  
  2437. The syntax of a \meta{target} of \lit{EXTERNAL} has changed
  2438. radically.  EXTERNAL links now look a lot more like conventional links.
  2439. The meaning of the \atr{access-method} attribute has changed radically;
  2440. it's now a lot more flexible.
  2441.  
  2442. Support for Kerberos has been specified.
  2443.  
  2444. \end{document}
  2445.